headlamp 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +4306 -2892
- package/dist/cli.cjs.map +4 -4
- package/dist/index.js +1571 -150
- package/dist/index.js.map +4 -4
- package/package.json +3 -2
package/dist/cli.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/make-dir/node_modules/semver/internal/debug.js", "../node_modules/make-dir/node_modules/semver/internal/constants.js", "../node_modules/make-dir/node_modules/semver/internal/re.js", "../node_modules/make-dir/node_modules/semver/internal/parse-options.js", "../node_modules/make-dir/node_modules/semver/internal/identifiers.js", "../node_modules/make-dir/node_modules/semver/classes/semver.js", "../node_modules/make-dir/node_modules/semver/functions/compare.js", "../node_modules/make-dir/node_modules/semver/functions/gte.js", "../node_modules/make-dir/index.js", "../node_modules/has-flag/index.js", "../node_modules/supports-color/index.js", "../node_modules/istanbul-lib-report/lib/file-writer.js", "../node_modules/istanbul-lib-report/lib/xml-writer.js", "../node_modules/istanbul-lib-report/lib/tree.js", "../node_modules/istanbul-lib-report/lib/watermarks.js", "../node_modules/istanbul-lib-
|
|
4
|
-
"sourcesContent": ["'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\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 {\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 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 gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst {promisify} = require('util');\nconst semverGte = require('semver/functions/gte');\n\nconst useNativeRecursiveOption = semverGte(process.version, '10.12.0');\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nconst checkPath = pth => {\n\tif (process.platform === 'win32') {\n\t\tconst pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''));\n\n\t\tif (pathHasInvalidWinCharacters) {\n\t\t\tconst error = new Error(`Path contains invalid characters: ${pth}`);\n\t\t\terror.code = 'EINVAL';\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\nconst processOptions = options => {\n\tconst defaults = {\n\t\tmode: 0o777,\n\t\tfs\n\t};\n\n\treturn {\n\t\t...defaults,\n\t\t...options\n\t};\n};\n\nconst permissionError = pth => {\n\t// This replicates the exception of `fs.mkdir` with native the\n\t// `recusive` option when run on an invalid drive under Windows.\n\tconst error = new Error(`operation not permitted, mkdir '${pth}'`);\n\terror.code = 'EPERM';\n\terror.errno = -4048;\n\terror.path = pth;\n\terror.syscall = 'mkdir';\n\treturn error;\n};\n\nconst makeDir = async (input, options) => {\n\tcheckPath(input);\n\toptions = processOptions(options);\n\n\tconst mkdir = promisify(options.fs.mkdir);\n\tconst stat = promisify(options.fs.stat);\n\n\tif (useNativeRecursiveOption && options.fs.mkdir === fs.mkdir) {\n\t\tconst pth = path.resolve(input);\n\n\t\tawait mkdir(pth, {\n\t\t\tmode: options.mode,\n\t\t\trecursive: true\n\t\t});\n\n\t\treturn pth;\n\t}\n\n\tconst make = async pth => {\n\t\ttry {\n\t\t\tawait mkdir(pth, options.mode);\n\n\t\t\treturn pth;\n\t\t} catch (error) {\n\t\t\tif (error.code === 'EPERM') {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (error.code === 'ENOENT') {\n\t\t\t\tif (path.dirname(pth) === pth) {\n\t\t\t\t\tthrow permissionError(pth);\n\t\t\t\t}\n\n\t\t\t\tif (error.message.includes('null bytes')) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tawait make(path.dirname(pth));\n\n\t\t\t\treturn make(pth);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst stats = await stat(pth);\n\t\t\t\tif (!stats.isDirectory()) {\n\t\t\t\t\tthrow new Error('The path is not a directory');\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn pth;\n\t\t}\n\t};\n\n\treturn make(path.resolve(input));\n};\n\nmodule.exports = makeDir;\n\nmodule.exports.sync = (input, options) => {\n\tcheckPath(input);\n\toptions = processOptions(options);\n\n\tif (useNativeRecursiveOption && options.fs.mkdirSync === fs.mkdirSync) {\n\t\tconst pth = path.resolve(input);\n\n\t\tfs.mkdirSync(pth, {\n\t\t\tmode: options.mode,\n\t\t\trecursive: true\n\t\t});\n\n\t\treturn pth;\n\t}\n\n\tconst make = pth => {\n\t\ttry {\n\t\t\toptions.fs.mkdirSync(pth, options.mode);\n\t\t} catch (error) {\n\t\t\tif (error.code === 'EPERM') {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (error.code === 'ENOENT') {\n\t\t\t\tif (path.dirname(pth) === pth) {\n\t\t\t\t\tthrow permissionError(pth);\n\t\t\t\t}\n\n\t\t\t\tif (error.message.includes('null bytes')) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tmake(path.dirname(pth));\n\t\t\t\treturn make(pth);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (!options.fs.statSync(pth).isDirectory()) {\n\t\t\t\t\tthrow new Error('The path is not a directory');\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn pth;\n\t};\n\n\treturn make(path.resolve(input));\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst path = require('path');\nconst fs = require('fs');\nconst mkdirp = require('make-dir');\nconst supportsColor = require('supports-color');\n\n/**\n * Base class for writing content\n * @class ContentWriter\n * @constructor\n */\nclass ContentWriter {\n /**\n * returns the colorized version of a string. Typically,\n * content writers that write to files will return the\n * same string and ones writing to a tty will wrap it in\n * appropriate escape sequences.\n * @param {String} str the string to colorize\n * @param {String} clazz one of `high`, `medium` or `low`\n * @returns {String} the colorized form of the string\n */\n colorize(str /*, clazz*/) {\n return str;\n }\n\n /**\n * writes a string appended with a newline to the destination\n * @param {String} str the string to write\n */\n println(str) {\n this.write(`${str}\\n`);\n }\n\n /**\n * closes this content writer. Should be called after all writes are complete.\n */\n close() {}\n}\n\n/**\n * a content writer that writes to a file\n * @param {Number} fd - the file descriptor\n * @extends ContentWriter\n * @constructor\n */\nclass FileContentWriter extends ContentWriter {\n constructor(fd) {\n super();\n\n this.fd = fd;\n }\n\n write(str) {\n fs.writeSync(this.fd, str);\n }\n\n close() {\n fs.closeSync(this.fd);\n }\n}\n\n// allow stdout to be captured for tests.\nlet capture = false;\nlet output = '';\n\n/**\n * a content writer that writes to the console\n * @extends ContentWriter\n * @constructor\n */\nclass ConsoleWriter extends ContentWriter {\n write(str) {\n if (capture) {\n output += str;\n } else {\n process.stdout.write(str);\n }\n }\n\n colorize(str, clazz) {\n const colors = {\n low: '31;1',\n medium: '33;1',\n high: '32;1'\n };\n\n /* istanbul ignore next: different modes for CI and local */\n if (supportsColor.stdout && colors[clazz]) {\n return `\\u001b[${colors[clazz]}m${str}\\u001b[0m`;\n }\n return str;\n }\n}\n\n/**\n * utility for writing files under a specific directory\n * @class FileWriter\n * @param {String} baseDir the base directory under which files should be written\n * @constructor\n */\nclass FileWriter {\n constructor(baseDir) {\n if (!baseDir) {\n throw new Error('baseDir must be specified');\n }\n this.baseDir = baseDir;\n }\n\n /**\n * static helpers for capturing stdout report output;\n * super useful for tests!\n */\n static startCapture() {\n capture = true;\n }\n\n static stopCapture() {\n capture = false;\n }\n\n static getOutput() {\n return output;\n }\n\n static resetOutput() {\n output = '';\n }\n\n /**\n * returns a FileWriter that is rooted at the supplied subdirectory\n * @param {String} subdir the subdirectory under which to root the\n * returned FileWriter\n * @returns {FileWriter}\n */\n writerForDir(subdir) {\n if (path.isAbsolute(subdir)) {\n throw new Error(\n `Cannot create subdir writer for absolute path: ${subdir}`\n );\n }\n return new FileWriter(`${this.baseDir}/${subdir}`);\n }\n\n /**\n * copies a file from a source directory to a destination name\n * @param {String} source path to source file\n * @param {String} dest relative path to destination file\n * @param {String} [header=undefined] optional text to prepend to destination\n * (e.g., an \"this file is autogenerated\" comment, copyright notice, etc.)\n */\n copyFile(source, dest, header) {\n if (path.isAbsolute(dest)) {\n throw new Error(`Cannot write to absolute path: ${dest}`);\n }\n dest = path.resolve(this.baseDir, dest);\n mkdirp.sync(path.dirname(dest));\n let contents;\n if (header) {\n contents = header + fs.readFileSync(source, 'utf8');\n } else {\n contents = fs.readFileSync(source);\n }\n fs.writeFileSync(dest, contents);\n }\n\n /**\n * returns a content writer for writing content to the supplied file.\n * @param {String|null} file the relative path to the file or the special\n * values `\"-\"` or `null` for writing to the console\n * @returns {ContentWriter}\n */\n writeFile(file) {\n if (file === null || file === '-') {\n return new ConsoleWriter();\n }\n if (path.isAbsolute(file)) {\n throw new Error(`Cannot write to absolute path: ${file}`);\n }\n file = path.resolve(this.baseDir, file);\n mkdirp.sync(path.dirname(file));\n return new FileContentWriter(fs.openSync(file, 'w'));\n }\n}\n\nmodule.exports = FileWriter;\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst INDENT = ' ';\n\nfunction attrString(attrs) {\n return Object.entries(attrs || {})\n .map(([k, v]) => ` ${k}=\"${v}\"`)\n .join('');\n}\n\n/**\n * a utility class to produce well-formed, indented XML\n * @param {ContentWriter} contentWriter the content writer that this utility wraps\n * @constructor\n */\nclass XMLWriter {\n constructor(contentWriter) {\n this.cw = contentWriter;\n this.stack = [];\n }\n\n indent(str) {\n return this.stack.map(() => INDENT).join('') + str;\n }\n\n /**\n * writes the opening XML tag with the supplied attributes\n * @param {String} name tag name\n * @param {Object} [attrs=null] attrs attributes for the tag\n */\n openTag(name, attrs) {\n const str = this.indent(`<${name + attrString(attrs)}>`);\n this.cw.println(str);\n this.stack.push(name);\n }\n\n /**\n * closes an open XML tag.\n * @param {String} name - tag name to close. This must match the writer's\n * notion of the tag that is currently open.\n */\n closeTag(name) {\n if (this.stack.length === 0) {\n throw new Error(`Attempt to close tag ${name} when not opened`);\n }\n const stashed = this.stack.pop();\n const str = `</${name}>`;\n\n if (stashed !== name) {\n throw new Error(\n `Attempt to close tag ${name} when ${stashed} was the one open`\n );\n }\n this.cw.println(this.indent(str));\n }\n\n /**\n * writes a tag and its value opening and closing it at the same time\n * @param {String} name tag name\n * @param {Object} [attrs=null] attrs tag attributes\n * @param {String} [content=null] content optional tag content\n */\n inlineTag(name, attrs, content) {\n let str = '<' + name + attrString(attrs);\n if (content) {\n str += `>${content}</${name}>`;\n } else {\n str += '/>';\n }\n str = this.indent(str);\n this.cw.println(str);\n }\n\n /**\n * closes all open tags and ends the document\n */\n closeAll() {\n this.stack\n .slice()\n .reverse()\n .forEach(name => {\n this.closeTag(name);\n });\n }\n}\n\nmodule.exports = XMLWriter;\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\n/**\n * An object with methods that are called during the traversal of the coverage tree.\n * A visitor has the following methods that are called during tree traversal.\n *\n * * `onStart(root, state)` - called before traversal begins\n * * `onSummary(node, state)` - called for every summary node\n * * `onDetail(node, state)` - called for every detail node\n * * `onSummaryEnd(node, state)` - called after all children have been visited for\n * a summary node.\n * * `onEnd(root, state)` - called after traversal ends\n *\n * @param delegate - a partial visitor that only implements the methods of interest\n * The visitor object supplies the missing methods as noops. For example, reports\n * that only need the final coverage summary need implement `onStart` and nothing\n * else. Reports that use only detailed coverage information need implement `onDetail`\n * and nothing else.\n * @constructor\n */\nclass Visitor {\n constructor(delegate) {\n this.delegate = delegate;\n }\n}\n\n['Start', 'End', 'Summary', 'SummaryEnd', 'Detail']\n .map(k => `on${k}`)\n .forEach(fn => {\n Object.defineProperty(Visitor.prototype, fn, {\n writable: true,\n value(node, state) {\n if (typeof this.delegate[fn] === 'function') {\n this.delegate[fn](node, state);\n }\n }\n });\n });\n\nclass CompositeVisitor extends Visitor {\n constructor(visitors) {\n super();\n\n if (!Array.isArray(visitors)) {\n visitors = [visitors];\n }\n this.visitors = visitors.map(v => {\n if (v instanceof Visitor) {\n return v;\n }\n return new Visitor(v);\n });\n }\n}\n\n['Start', 'Summary', 'SummaryEnd', 'Detail', 'End']\n .map(k => `on${k}`)\n .forEach(fn => {\n Object.defineProperty(CompositeVisitor.prototype, fn, {\n value(node, state) {\n this.visitors.forEach(v => {\n v[fn](node, state);\n });\n }\n });\n });\n\nclass BaseNode {\n isRoot() {\n return !this.getParent();\n }\n\n /**\n * visit all nodes depth-first from this node down. Note that `onStart`\n * and `onEnd` are never called on the visitor even if the current\n * node is the root of the tree.\n * @param visitor a full visitor that is called during tree traversal\n * @param state optional state that is passed around\n */\n visit(visitor, state) {\n if (this.isSummary()) {\n visitor.onSummary(this, state);\n } else {\n visitor.onDetail(this, state);\n }\n\n this.getChildren().forEach(child => {\n child.visit(visitor, state);\n });\n\n if (this.isSummary()) {\n visitor.onSummaryEnd(this, state);\n }\n }\n}\n\n/**\n * abstract base class for a coverage tree.\n * @constructor\n */\nclass BaseTree {\n constructor(root) {\n this.root = root;\n }\n\n /**\n * returns the root node of the tree\n */\n getRoot() {\n return this.root;\n }\n\n /**\n * visits the tree depth-first with the supplied partial visitor\n * @param visitor - a potentially partial visitor\n * @param state - the state to be passed around during tree traversal\n */\n visit(visitor, state) {\n if (!(visitor instanceof Visitor)) {\n visitor = new Visitor(visitor);\n }\n visitor.onStart(this.getRoot(), state);\n this.getRoot().visit(visitor, state);\n visitor.onEnd(this.getRoot(), state);\n }\n}\n\nmodule.exports = {\n BaseTree,\n BaseNode,\n Visitor,\n CompositeVisitor\n};\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nmodule.exports = {\n getDefault() {\n return {\n statements: [50, 80],\n functions: [50, 80],\n branches: [50, 80],\n lines: [50, 80]\n };\n }\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nmodule.exports = function percent(covered, total) {\n let tmp;\n if (total > 0) {\n tmp = (1000 * 100 * covered) / total;\n return Math.floor(tmp / 10) / 100;\n } else {\n return 100.0;\n }\n};\n", "'use strict';\n\nmodule.exports = function dataProperties(klass, properties) {\n properties.forEach(p => {\n Object.defineProperty(klass.prototype, p, {\n enumerable: true,\n get() {\n return this.data[p];\n }\n });\n });\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst percent = require('./percent');\nconst dataProperties = require('./data-properties');\n\nfunction blankSummary() {\n const empty = () => ({\n total: 0,\n covered: 0,\n skipped: 0,\n pct: 'Unknown'\n });\n\n return {\n lines: empty(),\n statements: empty(),\n functions: empty(),\n branches: empty(),\n branchesTrue: empty()\n };\n}\n\n// asserts that a data object \"looks like\" a summary coverage object\nfunction assertValidSummary(obj) {\n const valid =\n obj && obj.lines && obj.statements && obj.functions && obj.branches;\n if (!valid) {\n throw new Error(\n 'Invalid summary coverage object, missing keys, found:' +\n Object.keys(obj).join(',')\n );\n }\n}\n\n/**\n * CoverageSummary provides a summary of code coverage . It exposes 4 properties,\n * `lines`, `statements`, `branches`, and `functions`. Each of these properties\n * is an object that has 4 keys `total`, `covered`, `skipped` and `pct`.\n * `pct` is a percentage number (0-100).\n */\nclass CoverageSummary {\n /**\n * @constructor\n * @param {Object|CoverageSummary} [obj=undefined] an optional data object or\n * another coverage summary to initialize this object with.\n */\n constructor(obj) {\n if (!obj) {\n this.data = blankSummary();\n } else if (obj instanceof CoverageSummary) {\n this.data = obj.data;\n } else {\n this.data = obj;\n }\n assertValidSummary(this.data);\n }\n\n /**\n * merges a second summary coverage object into this one\n * @param {CoverageSummary} obj - another coverage summary object\n */\n merge(obj) {\n const keys = [\n 'lines',\n 'statements',\n 'branches',\n 'functions',\n 'branchesTrue'\n ];\n keys.forEach(key => {\n if (obj[key]) {\n this[key].total += obj[key].total;\n this[key].covered += obj[key].covered;\n this[key].skipped += obj[key].skipped;\n this[key].pct = percent(this[key].covered, this[key].total);\n }\n });\n\n return this;\n }\n\n /**\n * returns a POJO that is JSON serializable. May be used to get the raw\n * summary object.\n */\n toJSON() {\n return this.data;\n }\n\n /**\n * return true if summary has no lines of code\n */\n isEmpty() {\n return this.lines.total === 0;\n }\n}\n\ndataProperties(CoverageSummary, [\n 'lines',\n 'statements',\n 'functions',\n 'branches',\n 'branchesTrue'\n]);\n\nmodule.exports = {\n CoverageSummary\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst percent = require('./percent');\nconst dataProperties = require('./data-properties');\nconst { CoverageSummary } = require('./coverage-summary');\n\n// returns a data object that represents empty coverage\nfunction emptyCoverage(filePath, reportLogic) {\n const cov = {\n path: filePath,\n statementMap: {},\n fnMap: {},\n branchMap: {},\n s: {},\n f: {},\n b: {}\n };\n if (reportLogic) cov.bT = {};\n return cov;\n}\n\n// asserts that a data object \"looks like\" a coverage object\nfunction assertValidObject(obj) {\n const valid =\n obj &&\n obj.path &&\n obj.statementMap &&\n obj.fnMap &&\n obj.branchMap &&\n obj.s &&\n obj.f &&\n obj.b;\n if (!valid) {\n throw new Error(\n 'Invalid file coverage object, missing keys, found:' +\n Object.keys(obj).join(',')\n );\n }\n}\n\nconst keyFromLoc = ({ start, end }) =>\n `${start.line}|${start.column}|${end.line}|${end.column}`;\n\nconst isObj = o => !!o && typeof o === 'object';\nconst isLineCol = o =>\n isObj(o) && typeof o.line === 'number' && typeof o.column === 'number';\nconst isLoc = o => isObj(o) && isLineCol(o.start) && isLineCol(o.end);\nconst getLoc = o => (isLoc(o) ? o : isLoc(o.loc) ? o.loc : null);\n\n// When merging, we can have a case where two ranges cover\n// the same block of code with `hits=1`, and each carve out a\n// different range with `hits=0` to indicate it's uncovered.\n// Find the nearest container so that we can properly indicate\n// that both sections are hit.\n// Returns null if no containing item is found.\nconst findNearestContainer = (item, map) => {\n const itemLoc = getLoc(item);\n if (!itemLoc) return null;\n // the B item is not an identified range in the A set, BUT\n // it may be contained by an identified A range. If so, then\n // any hit of that containing A range counts as a hit of this\n // B range as well. We have to find the *narrowest* containing\n // range to be accurate, since ranges can be hit and un-hit\n // in a nested fashion.\n let nearestContainingItem = null;\n let containerDistance = null;\n let containerKey = null;\n for (const [i, mapItem] of Object.entries(map)) {\n const mapLoc = getLoc(mapItem);\n if (!mapLoc) continue;\n // contained if all of line distances are > 0\n // or line distance is 0 and col dist is >= 0\n const distance = [\n itemLoc.start.line - mapLoc.start.line,\n itemLoc.start.column - mapLoc.start.column,\n mapLoc.end.line - itemLoc.end.line,\n mapLoc.end.column - itemLoc.end.column\n ];\n if (\n distance[0] < 0 ||\n distance[2] < 0 ||\n (distance[0] === 0 && distance[1] < 0) ||\n (distance[2] === 0 && distance[3] < 0)\n ) {\n continue;\n }\n if (nearestContainingItem === null) {\n containerDistance = distance;\n nearestContainingItem = mapItem;\n containerKey = i;\n continue;\n }\n // closer line more relevant than closer column\n const closerBefore =\n distance[0] < containerDistance[0] ||\n (distance[0] === 0 && distance[1] < containerDistance[1]);\n const closerAfter =\n distance[2] < containerDistance[2] ||\n (distance[2] === 0 && distance[3] < containerDistance[3]);\n if (closerBefore || closerAfter) {\n // closer\n containerDistance = distance;\n nearestContainingItem = mapItem;\n containerKey = i;\n }\n }\n return containerKey;\n};\n\n// either add two numbers, or all matching entries in a number[]\nconst addHits = (aHits, bHits) => {\n if (typeof aHits === 'number' && typeof bHits === 'number') {\n return aHits + bHits;\n } else if (Array.isArray(aHits) && Array.isArray(bHits)) {\n return aHits.map((a, i) => (a || 0) + (bHits[i] || 0));\n }\n return null;\n};\n\nconst addNearestContainerHits = (item, itemHits, map, mapHits) => {\n const container = findNearestContainer(item, map);\n if (container) {\n return addHits(itemHits, mapHits[container]);\n } else {\n return itemHits;\n }\n};\n\nconst mergeProp = (aHits, aMap, bHits, bMap, itemKey = keyFromLoc) => {\n const aItems = {};\n for (const [key, itemHits] of Object.entries(aHits)) {\n const item = aMap[key];\n aItems[itemKey(item)] = [itemHits, item];\n }\n const bItems = {};\n for (const [key, itemHits] of Object.entries(bHits)) {\n const item = bMap[key];\n bItems[itemKey(item)] = [itemHits, item];\n }\n const mergedItems = {};\n for (const [key, aValue] of Object.entries(aItems)) {\n let aItemHits = aValue[0];\n const aItem = aValue[1];\n const bValue = bItems[key];\n if (!bValue) {\n // not an identified range in b, but might be contained by one\n aItemHits = addNearestContainerHits(aItem, aItemHits, bMap, bHits);\n } else {\n // is an identified range in b, so add the hits together\n aItemHits = addHits(aItemHits, bValue[0]);\n }\n mergedItems[key] = [aItemHits, aItem];\n }\n // now find the items in b that are not in a. already added matches.\n for (const [key, bValue] of Object.entries(bItems)) {\n let bItemHits = bValue[0];\n const bItem = bValue[1];\n if (mergedItems[key]) continue;\n // not an identified range in b, but might be contained by one\n bItemHits = addNearestContainerHits(bItem, bItemHits, aMap, aHits);\n mergedItems[key] = [bItemHits, bItem];\n }\n\n const hits = {};\n const map = {};\n\n Object.values(mergedItems).forEach(([itemHits, item], i) => {\n hits[i] = itemHits;\n map[i] = item;\n });\n\n return [hits, map];\n};\n\n/**\n * provides a read-only view of coverage for a single file.\n * The deep structure of this object is documented elsewhere. It has the following\n * properties:\n *\n * * `path` - the file path for which coverage is being tracked\n * * `statementMap` - map of statement locations keyed by statement index\n * * `fnMap` - map of function metadata keyed by function index\n * * `branchMap` - map of branch metadata keyed by branch index\n * * `s` - hit counts for statements\n * * `f` - hit count for functions\n * * `b` - hit count for branches\n */\nclass FileCoverage {\n /**\n * @constructor\n * @param {Object|FileCoverage|String} pathOrObj is a string that initializes\n * and empty coverage object with the specified file path or a data object that\n * has all the required properties for a file coverage object.\n */\n constructor(pathOrObj, reportLogic = false) {\n if (!pathOrObj) {\n throw new Error(\n 'Coverage must be initialized with a path or an object'\n );\n }\n if (typeof pathOrObj === 'string') {\n this.data = emptyCoverage(pathOrObj, reportLogic);\n } else if (pathOrObj instanceof FileCoverage) {\n this.data = pathOrObj.data;\n } else if (typeof pathOrObj === 'object') {\n this.data = pathOrObj;\n } else {\n throw new Error('Invalid argument to coverage constructor');\n }\n assertValidObject(this.data);\n }\n\n /**\n * returns computed line coverage from statement coverage.\n * This is a map of hits keyed by line number in the source.\n */\n getLineCoverage() {\n const statementMap = this.data.statementMap;\n const statements = this.data.s;\n const lineMap = Object.create(null);\n\n Object.entries(statements).forEach(([st, count]) => {\n /* istanbul ignore if: is this even possible? */\n if (!statementMap[st]) {\n return;\n }\n const { line } = statementMap[st].start;\n const prevVal = lineMap[line];\n if (prevVal === undefined || prevVal < count) {\n lineMap[line] = count;\n }\n });\n return lineMap;\n }\n\n /**\n * returns an array of uncovered line numbers.\n * @returns {Array} an array of line numbers for which no hits have been\n * collected.\n */\n getUncoveredLines() {\n const lc = this.getLineCoverage();\n const ret = [];\n Object.entries(lc).forEach(([l, hits]) => {\n if (hits === 0) {\n ret.push(l);\n }\n });\n return ret;\n }\n\n /**\n * returns a map of branch coverage by source line number.\n * @returns {Object} an object keyed by line number. Each object\n * has a `covered`, `total` and `coverage` (percentage) property.\n */\n getBranchCoverageByLine() {\n const branchMap = this.branchMap;\n const branches = this.b;\n const ret = {};\n Object.entries(branchMap).forEach(([k, map]) => {\n const line = map.line || map.loc.start.line;\n const branchData = branches[k];\n ret[line] = ret[line] || [];\n ret[line].push(...branchData);\n });\n Object.entries(ret).forEach(([k, dataArray]) => {\n const covered = dataArray.filter(item => item > 0);\n const coverage = (covered.length / dataArray.length) * 100;\n ret[k] = {\n covered: covered.length,\n total: dataArray.length,\n coverage\n };\n });\n return ret;\n }\n\n /**\n * return a JSON-serializable POJO for this file coverage object\n */\n toJSON() {\n return this.data;\n }\n\n /**\n * merges a second coverage object into this one, updating hit counts\n * @param {FileCoverage} other - the coverage object to be merged into this one.\n * Note that the other object should have the same structure as this one (same file).\n */\n merge(other) {\n if (other.all === true) {\n return;\n }\n\n if (this.all === true) {\n this.data = other.data;\n return;\n }\n\n let [hits, map] = mergeProp(\n this.s,\n this.statementMap,\n other.s,\n other.statementMap\n );\n this.data.s = hits;\n this.data.statementMap = map;\n\n const keyFromLocProp = x => keyFromLoc(x.loc);\n const keyFromLocationsProp = x => keyFromLoc(x.locations[0]);\n\n [hits, map] = mergeProp(\n this.f,\n this.fnMap,\n other.f,\n other.fnMap,\n keyFromLocProp\n );\n this.data.f = hits;\n this.data.fnMap = map;\n\n [hits, map] = mergeProp(\n this.b,\n this.branchMap,\n other.b,\n other.branchMap,\n keyFromLocationsProp\n );\n this.data.b = hits;\n this.data.branchMap = map;\n\n // Tracking additional information about branch truthiness\n // can be optionally enabled:\n if (this.bT && other.bT) {\n [hits, map] = mergeProp(\n this.bT,\n this.branchMap,\n other.bT,\n other.branchMap,\n keyFromLocationsProp\n );\n this.data.bT = hits;\n }\n }\n\n computeSimpleTotals(property) {\n let stats = this[property];\n\n if (typeof stats === 'function') {\n stats = stats.call(this);\n }\n\n const ret = {\n total: Object.keys(stats).length,\n covered: Object.values(stats).filter(v => !!v).length,\n skipped: 0\n };\n ret.pct = percent(ret.covered, ret.total);\n return ret;\n }\n\n computeBranchTotals(property) {\n const stats = this[property];\n const ret = { total: 0, covered: 0, skipped: 0 };\n\n Object.values(stats).forEach(branches => {\n ret.covered += branches.filter(hits => hits > 0).length;\n ret.total += branches.length;\n });\n ret.pct = percent(ret.covered, ret.total);\n return ret;\n }\n\n /**\n * resets hit counts for all statements, functions and branches\n * in this coverage object resulting in zero coverage.\n */\n resetHits() {\n const statements = this.s;\n const functions = this.f;\n const branches = this.b;\n const branchesTrue = this.bT;\n Object.keys(statements).forEach(s => {\n statements[s] = 0;\n });\n Object.keys(functions).forEach(f => {\n functions[f] = 0;\n });\n Object.keys(branches).forEach(b => {\n branches[b].fill(0);\n });\n // Tracking additional information about branch truthiness\n // can be optionally enabled:\n if (branchesTrue) {\n Object.keys(branchesTrue).forEach(bT => {\n branchesTrue[bT].fill(0);\n });\n }\n }\n\n /**\n * returns a CoverageSummary for this file coverage object\n * @returns {CoverageSummary}\n */\n toSummary() {\n const ret = {};\n ret.lines = this.computeSimpleTotals('getLineCoverage');\n ret.functions = this.computeSimpleTotals('f', 'fnMap');\n ret.statements = this.computeSimpleTotals('s', 'statementMap');\n ret.branches = this.computeBranchTotals('b');\n // Tracking additional information about branch truthiness\n // can be optionally enabled:\n if (this.bT) {\n ret.branchesTrue = this.computeBranchTotals('bT');\n }\n return new CoverageSummary(ret);\n }\n}\n\n// expose coverage data attributes\ndataProperties(FileCoverage, [\n 'path',\n 'statementMap',\n 'fnMap',\n 'branchMap',\n 's',\n 'f',\n 'b',\n 'bT',\n 'all'\n]);\n\nmodule.exports = {\n FileCoverage,\n // exported for testing\n findNearestContainer,\n addHits,\n addNearestContainerHits\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst { FileCoverage } = require('./file-coverage');\nconst { CoverageSummary } = require('./coverage-summary');\n\nfunction maybeConstruct(obj, klass) {\n if (obj instanceof klass) {\n return obj;\n }\n\n return new klass(obj);\n}\n\nfunction loadMap(source) {\n const data = Object.create(null);\n if (!source) {\n return data;\n }\n\n Object.entries(source).forEach(([k, cov]) => {\n data[k] = maybeConstruct(cov, FileCoverage);\n });\n\n return data;\n}\n\n/** CoverageMap is a map of `FileCoverage` objects keyed by file paths. */\nclass CoverageMap {\n /**\n * @constructor\n * @param {Object} [obj=undefined] obj A coverage map from which to initialize this\n * map's contents. This can be the raw global coverage object.\n */\n constructor(obj) {\n if (obj instanceof CoverageMap) {\n this.data = obj.data;\n } else {\n this.data = loadMap(obj);\n }\n }\n\n /**\n * merges a second coverage map into this one\n * @param {CoverageMap} obj - a CoverageMap or its raw data. Coverage is merged\n * correctly for the same files and additional file coverage keys are created\n * as needed.\n */\n merge(obj) {\n const other = maybeConstruct(obj, CoverageMap);\n Object.values(other.data).forEach(fc => {\n this.addFileCoverage(fc);\n });\n }\n\n /**\n * filter the coveragemap based on the callback provided\n * @param {Function (filename)} callback - Returns true if the path\n * should be included in the coveragemap. False if it should be\n * removed.\n */\n filter(callback) {\n Object.keys(this.data).forEach(k => {\n if (!callback(k)) {\n delete this.data[k];\n }\n });\n }\n\n /**\n * returns a JSON-serializable POJO for this coverage map\n * @returns {Object}\n */\n toJSON() {\n return this.data;\n }\n\n /**\n * returns an array for file paths for which this map has coverage\n * @returns {Array{string}} - array of files\n */\n files() {\n return Object.keys(this.data);\n }\n\n /**\n * returns the file coverage for the specified file.\n * @param {String} file\n * @returns {FileCoverage}\n */\n fileCoverageFor(file) {\n const fc = this.data[file];\n if (!fc) {\n throw new Error(`No file coverage available for: ${file}`);\n }\n return fc;\n }\n\n /**\n * adds a file coverage object to this map. If the path for the object,\n * already exists in the map, it is merged with the existing coverage\n * otherwise a new key is added to the map.\n * @param {FileCoverage} fc the file coverage to add\n */\n addFileCoverage(fc) {\n const cov = new FileCoverage(fc);\n const { path } = cov;\n if (this.data[path]) {\n this.data[path].merge(cov);\n } else {\n this.data[path] = cov;\n }\n }\n\n /**\n * returns the coverage summary for all the file coverage objects in this map.\n * @returns {CoverageSummary}\n */\n getCoverageSummary() {\n const ret = new CoverageSummary();\n Object.values(this.data).forEach(fc => {\n ret.merge(fc.toSummary());\n });\n\n return ret;\n }\n}\n\nmodule.exports = {\n CoverageMap\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\n/**\n * istanbul-lib-coverage exports an API that allows you to create and manipulate\n * file coverage, coverage maps (a set of file coverage objects) and summary\n * coverage objects. File coverage for the same file can be merged as can\n * entire coverage maps.\n *\n * @module Exports\n */\nconst { FileCoverage } = require('./lib/file-coverage');\nconst { CoverageMap } = require('./lib/coverage-map');\nconst { CoverageSummary } = require('./lib/coverage-summary');\n\nmodule.exports = {\n /**\n * creates a coverage summary object\n * @param {Object} obj an argument with the same semantics\n * as the one passed to the `CoverageSummary` constructor\n * @returns {CoverageSummary}\n */\n createCoverageSummary(obj) {\n if (obj && obj instanceof CoverageSummary) {\n return obj;\n }\n return new CoverageSummary(obj);\n },\n /**\n * creates a CoverageMap object\n * @param {Object} obj optional - an argument with the same semantics\n * as the one passed to the CoverageMap constructor.\n * @returns {CoverageMap}\n */\n createCoverageMap(obj) {\n if (obj && obj instanceof CoverageMap) {\n return obj;\n }\n return new CoverageMap(obj);\n },\n /**\n * creates a FileCoverage object\n * @param {Object} obj optional - an argument with the same semantics\n * as the one passed to the FileCoverage constructor.\n * @returns {FileCoverage}\n */\n createFileCoverage(obj) {\n if (obj && obj instanceof FileCoverage) {\n return obj;\n }\n return new FileCoverage(obj);\n }\n};\n\n/** classes exported for reuse */\nmodule.exports.classes = {\n /**\n * the file coverage constructor\n */\n FileCoverage\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst path = require('path');\nlet parsePath = path.parse;\nlet SEP = path.sep;\nconst origParser = parsePath;\nconst origSep = SEP;\n\nfunction makeRelativeNormalizedPath(str, sep) {\n const parsed = parsePath(str);\n let root = parsed.root;\n let dir;\n let file = parsed.base;\n let quoted;\n let pos;\n\n // handle a weird windows case separately\n if (sep === '\\\\') {\n pos = root.indexOf(':\\\\');\n if (pos >= 0) {\n root = root.substring(0, pos + 2);\n }\n }\n dir = parsed.dir.substring(root.length);\n\n if (str === '') {\n return [];\n }\n\n if (sep !== '/') {\n quoted = new RegExp(sep.replace(/\\W/g, '\\\\$&'), 'g');\n dir = dir.replace(quoted, '/');\n file = file.replace(quoted, '/'); // excessively paranoid?\n }\n\n if (dir !== '') {\n dir = `${dir}/${file}`;\n } else {\n dir = file;\n }\n if (dir.substring(0, 1) === '/') {\n dir = dir.substring(1);\n }\n dir = dir.split(/\\/+/);\n return dir;\n}\n\nclass Path {\n constructor(strOrArray) {\n if (Array.isArray(strOrArray)) {\n this.v = strOrArray;\n } else if (typeof strOrArray === 'string') {\n this.v = makeRelativeNormalizedPath(strOrArray, SEP);\n } else {\n throw new Error(\n `Invalid Path argument must be string or array:${strOrArray}`\n );\n }\n }\n\n toString() {\n return this.v.join('/');\n }\n\n hasParent() {\n return this.v.length > 0;\n }\n\n parent() {\n if (!this.hasParent()) {\n throw new Error('Unable to get parent for 0 elem path');\n }\n const p = this.v.slice();\n p.pop();\n return new Path(p);\n }\n\n elements() {\n return this.v.slice();\n }\n\n name() {\n return this.v.slice(-1)[0];\n }\n\n contains(other) {\n let i;\n if (other.length > this.length) {\n return false;\n }\n for (i = 0; i < other.length; i += 1) {\n if (this.v[i] !== other.v[i]) {\n return false;\n }\n }\n return true;\n }\n\n ancestorOf(other) {\n return other.contains(this) && other.length !== this.length;\n }\n\n descendantOf(other) {\n return this.contains(other) && other.length !== this.length;\n }\n\n commonPrefixPath(other) {\n const len = this.length > other.length ? other.length : this.length;\n let i;\n const ret = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.v[i] === other.v[i]) {\n ret.push(this.v[i]);\n } else {\n break;\n }\n }\n return new Path(ret);\n }\n\n static compare(a, b) {\n const al = a.length;\n const bl = b.length;\n\n if (al < bl) {\n return -1;\n }\n\n if (al > bl) {\n return 1;\n }\n\n const astr = a.toString();\n const bstr = b.toString();\n return astr < bstr ? -1 : astr > bstr ? 1 : 0;\n }\n}\n\n['push', 'pop', 'shift', 'unshift', 'splice'].forEach(fn => {\n Object.defineProperty(Path.prototype, fn, {\n value(...args) {\n return this.v[fn](...args);\n }\n });\n});\n\nObject.defineProperty(Path.prototype, 'length', {\n enumerable: true,\n get() {\n return this.v.length;\n }\n});\n\nmodule.exports = Path;\nPath.tester = {\n setParserAndSep(p, sep) {\n parsePath = p;\n SEP = sep;\n },\n reset() {\n parsePath = origParser;\n SEP = origSep;\n }\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst coverage = require('istanbul-lib-coverage');\nconst Path = require('./path');\nconst { BaseNode, BaseTree } = require('./tree');\n\nclass ReportNode extends BaseNode {\n constructor(path, fileCoverage) {\n super();\n\n this.path = path;\n this.parent = null;\n this.fileCoverage = fileCoverage;\n this.children = [];\n }\n\n static createRoot(children) {\n const root = new ReportNode(new Path([]));\n\n children.forEach(child => {\n root.addChild(child);\n });\n\n return root;\n }\n\n addChild(child) {\n child.parent = this;\n this.children.push(child);\n }\n\n asRelative(p) {\n if (p.substring(0, 1) === '/') {\n return p.substring(1);\n }\n return p;\n }\n\n getQualifiedName() {\n return this.asRelative(this.path.toString());\n }\n\n getRelativeName() {\n const parent = this.getParent();\n const myPath = this.path;\n let relPath;\n let i;\n const parentPath = parent ? parent.path : new Path([]);\n if (parentPath.ancestorOf(myPath)) {\n relPath = new Path(myPath.elements());\n for (i = 0; i < parentPath.length; i += 1) {\n relPath.shift();\n }\n return this.asRelative(relPath.toString());\n }\n return this.asRelative(this.path.toString());\n }\n\n getParent() {\n return this.parent;\n }\n\n getChildren() {\n return this.children;\n }\n\n isSummary() {\n return !this.fileCoverage;\n }\n\n getFileCoverage() {\n return this.fileCoverage;\n }\n\n getCoverageSummary(filesOnly) {\n const cacheProp = `c_${filesOnly ? 'files' : 'full'}`;\n let summary;\n\n if (Object.prototype.hasOwnProperty.call(this, cacheProp)) {\n return this[cacheProp];\n }\n\n if (!this.isSummary()) {\n summary = this.getFileCoverage().toSummary();\n } else {\n let count = 0;\n summary = coverage.createCoverageSummary();\n this.getChildren().forEach(child => {\n if (filesOnly && child.isSummary()) {\n return;\n }\n count += 1;\n summary.merge(child.getCoverageSummary(filesOnly));\n });\n if (count === 0 && filesOnly) {\n summary = null;\n }\n }\n this[cacheProp] = summary;\n return summary;\n }\n}\n\nclass ReportTree extends BaseTree {\n constructor(root, childPrefix) {\n super(root);\n\n const maybePrefix = node => {\n if (childPrefix && !node.isRoot()) {\n node.path.unshift(childPrefix);\n }\n };\n this.visit({\n onDetail: maybePrefix,\n onSummary(node) {\n maybePrefix(node);\n node.children.sort((a, b) => {\n const astr = a.path.toString();\n const bstr = b.path.toString();\n return astr < bstr\n ? -1\n : astr > bstr\n ? 1\n : /* istanbul ignore next */ 0;\n });\n }\n });\n }\n}\n\nfunction findCommonParent(paths) {\n return paths.reduce(\n (common, path) => common.commonPrefixPath(path),\n paths[0] || new Path([])\n );\n}\n\nfunction findOrCreateParent(parentPath, nodeMap, created = () => {}) {\n let parent = nodeMap[parentPath.toString()];\n\n if (!parent) {\n parent = new ReportNode(parentPath);\n nodeMap[parentPath.toString()] = parent;\n created(parentPath, parent);\n }\n\n return parent;\n}\n\nfunction toDirParents(list) {\n const nodeMap = Object.create(null);\n list.forEach(o => {\n const parent = findOrCreateParent(o.path.parent(), nodeMap);\n parent.addChild(new ReportNode(o.path, o.fileCoverage));\n });\n\n return Object.values(nodeMap);\n}\n\nfunction addAllPaths(topPaths, nodeMap, path, node) {\n const parent = findOrCreateParent(\n path.parent(),\n nodeMap,\n (parentPath, parent) => {\n if (parentPath.hasParent()) {\n addAllPaths(topPaths, nodeMap, parentPath, parent);\n } else {\n topPaths.push(parent);\n }\n }\n );\n\n parent.addChild(node);\n}\n\nfunction foldIntoOneDir(node, parent) {\n const { children } = node;\n if (children.length === 1 && !children[0].fileCoverage) {\n children[0].parent = parent;\n return foldIntoOneDir(children[0], parent);\n }\n node.children = children.map(child => foldIntoOneDir(child, node));\n return node;\n}\n\nfunction pkgSummaryPrefix(dirParents, commonParent) {\n if (!dirParents.some(dp => dp.path.length === 0)) {\n return;\n }\n\n if (commonParent.length === 0) {\n return 'root';\n }\n\n return commonParent.name();\n}\n\nclass SummarizerFactory {\n constructor(coverageMap, defaultSummarizer = 'pkg') {\n this._coverageMap = coverageMap;\n this._defaultSummarizer = defaultSummarizer;\n this._initialList = coverageMap.files().map(filePath => ({\n filePath,\n path: new Path(filePath),\n fileCoverage: coverageMap.fileCoverageFor(filePath)\n }));\n this._commonParent = findCommonParent(\n this._initialList.map(o => o.path.parent())\n );\n if (this._commonParent.length > 0) {\n this._initialList.forEach(o => {\n o.path.splice(0, this._commonParent.length);\n });\n }\n }\n\n get defaultSummarizer() {\n return this[this._defaultSummarizer];\n }\n\n get flat() {\n if (!this._flat) {\n this._flat = new ReportTree(\n ReportNode.createRoot(\n this._initialList.map(\n node => new ReportNode(node.path, node.fileCoverage)\n )\n )\n );\n }\n\n return this._flat;\n }\n\n _createPkg() {\n const dirParents = toDirParents(this._initialList);\n if (dirParents.length === 1) {\n return new ReportTree(dirParents[0]);\n }\n\n return new ReportTree(\n ReportNode.createRoot(dirParents),\n pkgSummaryPrefix(dirParents, this._commonParent)\n );\n }\n\n get pkg() {\n if (!this._pkg) {\n this._pkg = this._createPkg();\n }\n\n return this._pkg;\n }\n\n _createNested() {\n const nodeMap = Object.create(null);\n const topPaths = [];\n this._initialList.forEach(o => {\n const node = new ReportNode(o.path, o.fileCoverage);\n addAllPaths(topPaths, nodeMap, o.path, node);\n });\n\n const topNodes = topPaths.map(node => foldIntoOneDir(node));\n if (topNodes.length === 1) {\n return new ReportTree(topNodes[0]);\n }\n\n return new ReportTree(ReportNode.createRoot(topNodes));\n }\n\n get nested() {\n if (!this._nested) {\n this._nested = this._createNested();\n }\n\n return this._nested;\n }\n}\n\nmodule.exports = SummarizerFactory;\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst fs = require('fs');\nconst FileWriter = require('./file-writer');\nconst XMLWriter = require('./xml-writer');\nconst tree = require('./tree');\nconst watermarks = require('./watermarks');\nconst SummarizerFactory = require('./summarizer-factory');\n\nfunction defaultSourceLookup(path) {\n try {\n return fs.readFileSync(path, 'utf8');\n } catch (ex) {\n throw new Error(`Unable to lookup source: ${path} (${ex.message})`);\n }\n}\n\nfunction normalizeWatermarks(specified = {}) {\n Object.entries(watermarks.getDefault()).forEach(([k, value]) => {\n const specValue = specified[k];\n if (!Array.isArray(specValue) || specValue.length !== 2) {\n specified[k] = value;\n }\n });\n\n return specified;\n}\n\n/**\n * A reporting context that is passed to report implementations\n * @param {Object} [opts=null] opts options\n * @param {String} [opts.dir='coverage'] opts.dir the reporting directory\n * @param {Object} [opts.watermarks=null] opts.watermarks watermarks for\n * statements, lines, branches and functions\n * @param {Function} [opts.sourceFinder=fsLookup] opts.sourceFinder a\n * function that returns source code given a file path. Defaults to\n * filesystem lookups based on path.\n * @constructor\n */\nclass Context {\n constructor(opts) {\n this.dir = opts.dir || 'coverage';\n this.watermarks = normalizeWatermarks(opts.watermarks);\n this.sourceFinder = opts.sourceFinder || defaultSourceLookup;\n this._summarizerFactory = new SummarizerFactory(\n opts.coverageMap,\n opts.defaultSummarizer\n );\n this.data = {};\n }\n\n /**\n * returns a FileWriter implementation for reporting use. Also available\n * as the `writer` property on the context.\n * @returns {Writer}\n */\n getWriter() {\n return this.writer;\n }\n\n /**\n * returns the source code for the specified file path or throws if\n * the source could not be found.\n * @param {String} filePath the file path as found in a file coverage object\n * @returns {String} the source code\n */\n getSource(filePath) {\n return this.sourceFinder(filePath);\n }\n\n /**\n * returns the coverage class given a coverage\n * types and a percentage value.\n * @param {String} type - the coverage type, one of `statements`, `functions`,\n * `branches`, or `lines`\n * @param {Number} value - the percentage value\n * @returns {String} one of `high`, `medium` or `low`\n */\n classForPercent(type, value) {\n const watermarks = this.watermarks[type];\n if (!watermarks) {\n return 'unknown';\n }\n if (value < watermarks[0]) {\n return 'low';\n }\n if (value >= watermarks[1]) {\n return 'high';\n }\n return 'medium';\n }\n\n /**\n * returns an XML writer for the supplied content writer\n * @param {ContentWriter} contentWriter the content writer to which the returned XML writer\n * writes data\n * @returns {XMLWriter}\n */\n getXMLWriter(contentWriter) {\n return new XMLWriter(contentWriter);\n }\n\n /**\n * returns a full visitor given a partial one.\n * @param {Object} partialVisitor a partial visitor only having the functions of\n * interest to the caller. These functions are called with a scope that is the\n * supplied object.\n * @returns {Visitor}\n */\n getVisitor(partialVisitor) {\n return new tree.Visitor(partialVisitor);\n }\n\n getTree(name = 'defaultSummarizer') {\n return this._summarizerFactory[name];\n }\n}\n\nObject.defineProperty(Context.prototype, 'writer', {\n enumerable: true,\n get() {\n if (!this.data.writer) {\n this.data.writer = new FileWriter(this.dir);\n }\n return this.data.writer;\n }\n});\n\nmodule.exports = Context;\n", "'use strict';\n\n// TODO: switch to class private field when targetting node.js 12\nconst _summarizer = Symbol('ReportBase.#summarizer');\n\nclass ReportBase {\n constructor(opts = {}) {\n this[_summarizer] = opts.summarizer;\n }\n\n execute(context) {\n context.getTree(this[_summarizer]).visit(this, context);\n }\n}\n\nmodule.exports = ReportBase;\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\n/**\n * @module Exports\n */\n\nconst Context = require('./lib/context');\nconst watermarks = require('./lib/watermarks');\nconst ReportBase = require('./lib/report-base');\n\nmodule.exports = {\n /**\n * returns a reporting context for the supplied options\n * @param {Object} [opts=null] opts\n * @returns {Context}\n */\n createContext(opts) {\n return new Context(opts);\n },\n\n /**\n * returns the default watermarks that would be used when not\n * overridden\n * @returns {Object} an object with `statements`, `functions`, `branches`,\n * and `line` keys. Each value is a 2 element array that has the low and\n * high watermark as percentages.\n */\n getDefaultWatermarks() {\n return watermarks.getDefault();\n },\n\n /**\n * Base class for all reports\n */\n ReportBase\n};\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst path = require('path');\n\nmodule.exports = {\n create(name, cfg) {\n cfg = cfg || {};\n let Cons;\n try {\n Cons = require(path.join(__dirname, 'lib', name));\n } catch (e) {\n if (e.code !== 'MODULE_NOT_FOUND') {\n throw e;\n }\n\n Cons = require(name);\n }\n\n return new Cons(cfg);\n }\n};\n", "export type EnvInput = NodeJS.ProcessEnv | Record<string, unknown>;\n\nexport const safeEnv = (\n ...sources: EnvInput[]\n): Record<string, string | undefined> => {\n const normalizedEnv: Record<string, string | undefined> = {};\n for (const source of sources) {\n for (const [key, value] of Object.entries(source ?? {})) {\n if (value == null) {\n normalizedEnv[key] = undefined;\n } else {\n switch (typeof value) {\n case \"string\":\n normalizedEnv[key] = value;\n break;\n case \"boolean\":\n case \"number\":\n case \"bigint\":\n normalizedEnv[key] = String(value);\n break;\n default:\n break;\n }\n }\n }\n }\n return normalizedEnv;\n};\n", "class AbortError extends Error {\n constructor(message = 'The operation was aborted') {\n super(message);\n this.name = 'AbortError';\n }\n}\n\nexport { AbortError };\n", "class TimeoutError extends Error {\n constructor(message = 'The operation was timed out') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport { TimeoutError };\n", "import { AbortError } from '../error/AbortError.mjs';\n\nfunction delay(ms, { signal } = {}) {\n return new Promise((resolve, reject) => {\n const abortError = () => {\n reject(new AbortError());\n };\n const abortHandler = () => {\n clearTimeout(timeoutId);\n abortError();\n };\n if (signal?.aborted) {\n return abortError();\n }\n const timeoutId = setTimeout(() => {\n signal?.removeEventListener('abort', abortHandler);\n resolve();\n }, ms);\n signal?.addEventListener('abort', abortHandler, { once: true });\n });\n}\n\nexport { delay };\n", "import { delay } from './delay.mjs';\nimport { TimeoutError } from '../error/TimeoutError.mjs';\n\nasync function timeout(ms) {\n await delay(ms);\n throw new TimeoutError();\n}\n\nexport { timeout };\n", "import { timeout } from './timeout.mjs';\n\nasync function withTimeout(run, ms) {\n return Promise.race([run(), timeout(ms)]);\n}\n\nexport { withTimeout };\n", "export { at } from './array/at.mjs';\nexport { chunk } from './array/chunk.mjs';\nexport { compact } from './array/compact.mjs';\nexport { countBy } from './array/countBy.mjs';\nexport { difference } from './array/difference.mjs';\nexport { differenceBy } from './array/differenceBy.mjs';\nexport { differenceWith } from './array/differenceWith.mjs';\nexport { drop } from './array/drop.mjs';\nexport { dropRight } from './array/dropRight.mjs';\nexport { dropRightWhile } from './array/dropRightWhile.mjs';\nexport { dropWhile } from './array/dropWhile.mjs';\nexport { fill } from './array/fill.mjs';\nexport { flatMap } from './array/flatMap.mjs';\nexport { flatMapDeep } from './array/flatMapDeep.mjs';\nexport { flatten } from './array/flatten.mjs';\nexport { flattenDeep } from './array/flattenDeep.mjs';\nexport { forEachRight } from './array/forEachRight.mjs';\nexport { groupBy } from './array/groupBy.mjs';\nexport { head } from './array/head.mjs';\nexport { initial } from './array/initial.mjs';\nexport { intersection } from './array/intersection.mjs';\nexport { intersectionBy } from './array/intersectionBy.mjs';\nexport { intersectionWith } from './array/intersectionWith.mjs';\nexport { isSubset } from './array/isSubset.mjs';\nexport { isSubsetWith } from './array/isSubsetWith.mjs';\nexport { keyBy } from './array/keyBy.mjs';\nexport { last } from './array/last.mjs';\nexport { maxBy } from './array/maxBy.mjs';\nexport { minBy } from './array/minBy.mjs';\nexport { orderBy } from './array/orderBy.mjs';\nexport { partition } from './array/partition.mjs';\nexport { pull } from './array/pull.mjs';\nexport { pullAt } from './array/pullAt.mjs';\nexport { remove } from './array/remove.mjs';\nexport { sample } from './array/sample.mjs';\nexport { sampleSize } from './array/sampleSize.mjs';\nexport { shuffle } from './array/shuffle.mjs';\nexport { sortBy } from './array/sortBy.mjs';\nexport { tail } from './array/tail.mjs';\nexport { take } from './array/take.mjs';\nexport { takeRight } from './array/takeRight.mjs';\nexport { takeRightWhile } from './array/takeRightWhile.mjs';\nexport { takeWhile } from './array/takeWhile.mjs';\nexport { toFilled } from './array/toFilled.mjs';\nexport { union } from './array/union.mjs';\nexport { unionBy } from './array/unionBy.mjs';\nexport { unionWith } from './array/unionWith.mjs';\nexport { uniq } from './array/uniq.mjs';\nexport { uniqBy } from './array/uniqBy.mjs';\nexport { uniqWith } from './array/uniqWith.mjs';\nexport { unzip } from './array/unzip.mjs';\nexport { unzipWith } from './array/unzipWith.mjs';\nexport { windowed } from './array/windowed.mjs';\nexport { without } from './array/without.mjs';\nexport { xor } from './array/xor.mjs';\nexport { xorBy } from './array/xorBy.mjs';\nexport { xorWith } from './array/xorWith.mjs';\nexport { zip } from './array/zip.mjs';\nexport { zipObject } from './array/zipObject.mjs';\nexport { zipWith } from './array/zipWith.mjs';\nexport { AbortError } from './error/AbortError.mjs';\nexport { TimeoutError } from './error/TimeoutError.mjs';\nexport { after } from './function/after.mjs';\nexport { ary } from './function/ary.mjs';\nexport { asyncNoop } from './function/asyncNoop.mjs';\nexport { before } from './function/before.mjs';\nexport { curry } from './function/curry.mjs';\nexport { curryRight } from './function/curryRight.mjs';\nexport { debounce } from './function/debounce.mjs';\nexport { flow } from './function/flow.mjs';\nexport { flowRight } from './function/flowRight.mjs';\nexport { identity } from './function/identity.mjs';\nexport { memoize } from './function/memoize.mjs';\nexport { negate } from './function/negate.mjs';\nexport { noop } from './function/noop.mjs';\nexport { once } from './function/once.mjs';\nexport { partial } from './function/partial.mjs';\nexport { partialRight } from './function/partialRight.mjs';\nexport { rest } from './function/rest.mjs';\nexport { retry } from './function/retry.mjs';\nexport { spread } from './function/spread.mjs';\nexport { throttle } from './function/throttle.mjs';\nexport { unary } from './function/unary.mjs';\nexport { clamp } from './math/clamp.mjs';\nexport { inRange } from './math/inRange.mjs';\nexport { mean } from './math/mean.mjs';\nexport { meanBy } from './math/meanBy.mjs';\nexport { median } from './math/median.mjs';\nexport { medianBy } from './math/medianBy.mjs';\nexport { random } from './math/random.mjs';\nexport { randomInt } from './math/randomInt.mjs';\nexport { range } from './math/range.mjs';\nexport { rangeRight } from './math/rangeRight.mjs';\nexport { round } from './math/round.mjs';\nexport { sum } from './math/sum.mjs';\nexport { sumBy } from './math/sumBy.mjs';\nexport { clone } from './object/clone.mjs';\nexport { cloneDeep } from './object/cloneDeep.mjs';\nexport { cloneDeepWith } from './object/cloneDeepWith.mjs';\nexport { findKey } from './object/findKey.mjs';\nexport { flattenObject } from './object/flattenObject.mjs';\nexport { invert } from './object/invert.mjs';\nexport { mapKeys } from './object/mapKeys.mjs';\nexport { mapValues } from './object/mapValues.mjs';\nexport { merge } from './object/merge.mjs';\nexport { mergeWith } from './object/mergeWith.mjs';\nexport { omit } from './object/omit.mjs';\nexport { omitBy } from './object/omitBy.mjs';\nexport { pick } from './object/pick.mjs';\nexport { pickBy } from './object/pickBy.mjs';\nexport { toCamelCaseKeys } from './object/toCamelCaseKeys.mjs';\nexport { toMerged } from './object/toMerged.mjs';\nexport { toSnakeCaseKeys } from './object/toSnakeCaseKeys.mjs';\nexport { isArrayBuffer } from './predicate/isArrayBuffer.mjs';\nexport { isBlob } from './predicate/isBlob.mjs';\nexport { isBoolean } from './predicate/isBoolean.mjs';\nexport { isBrowser } from './predicate/isBrowser.mjs';\nexport { isBuffer } from './predicate/isBuffer.mjs';\nexport { isDate } from './predicate/isDate.mjs';\nexport { isEqual } from './predicate/isEqual.mjs';\nexport { isEqualWith } from './predicate/isEqualWith.mjs';\nexport { isError } from './predicate/isError.mjs';\nexport { isFile } from './predicate/isFile.mjs';\nexport { isFunction } from './predicate/isFunction.mjs';\nexport { isJSON } from './predicate/isJSON.mjs';\nexport { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.mjs';\nexport { isLength } from './predicate/isLength.mjs';\nexport { isMap } from './predicate/isMap.mjs';\nexport { isNil } from './predicate/isNil.mjs';\nexport { isNode } from './predicate/isNode.mjs';\nexport { isNotNil } from './predicate/isNotNil.mjs';\nexport { isNull } from './predicate/isNull.mjs';\nexport { isPlainObject } from './predicate/isPlainObject.mjs';\nexport { isPrimitive } from './predicate/isPrimitive.mjs';\nexport { isPromise } from './predicate/isPromise.mjs';\nexport { isRegExp } from './predicate/isRegExp.mjs';\nexport { isSet } from './predicate/isSet.mjs';\nexport { isString } from './predicate/isString.mjs';\nexport { isSymbol } from './predicate/isSymbol.mjs';\nexport { isTypedArray } from './predicate/isTypedArray.mjs';\nexport { isUndefined } from './predicate/isUndefined.mjs';\nexport { isWeakMap } from './predicate/isWeakMap.mjs';\nexport { isWeakSet } from './predicate/isWeakSet.mjs';\nexport { delay } from './promise/delay.mjs';\nexport { Mutex } from './promise/mutex.mjs';\nexport { Semaphore } from './promise/semaphore.mjs';\nexport { timeout } from './promise/timeout.mjs';\nexport { withTimeout } from './promise/withTimeout.mjs';\nexport { camelCase } from './string/camelCase.mjs';\nexport { capitalize } from './string/capitalize.mjs';\nexport { constantCase } from './string/constantCase.mjs';\nexport { deburr } from './string/deburr.mjs';\nexport { escape } from './string/escape.mjs';\nexport { escapeRegExp } from './string/escapeRegExp.mjs';\nexport { kebabCase } from './string/kebabCase.mjs';\nexport { lowerCase } from './string/lowerCase.mjs';\nexport { lowerFirst } from './string/lowerFirst.mjs';\nexport { pad } from './string/pad.mjs';\nexport { pascalCase } from './string/pascalCase.mjs';\nexport { reverseString } from './string/reverseString.mjs';\nexport { snakeCase } from './string/snakeCase.mjs';\nexport { startCase } from './string/startCase.mjs';\nexport { trim } from './string/trim.mjs';\nexport { trimEnd } from './string/trimEnd.mjs';\nexport { trimStart } from './string/trimStart.mjs';\nexport { unescape } from './string/unescape.mjs';\nexport { upperCase } from './string/upperCase.mjs';\nexport { upperFirst } from './string/upperFirst.mjs';\nexport { words } from './string/words.mjs';\nexport { attempt } from './util/attempt.mjs';\nexport { attemptAsync } from './util/attemptAsync.mjs';\nexport { invariant as assert, invariant } from './util/invariant.mjs';\n", "import { spawn } from \"node:child_process\";\nimport * as os from \"node:os\";\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { withTimeout, TimeoutError } from \"es-toolkit\";\n\nexport type RunTextOptions = {\n readonly cwd?: string;\n readonly env?: NodeJS.ProcessEnv;\n readonly timeoutMs?: number;\n};\n\nexport const runText = async (\n cmd: string,\n args: readonly string[],\n opts: RunTextOptions = {}\n): Promise<string> => {\n const child = spawn(cmd, [...args], {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: false,\n windowsHide: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout?.on(\"data\", (chunk) => {\n stdout += String(chunk);\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += String(chunk);\n });\n\n const exec = new Promise<string>((resolve, reject) => {\n child.on(\"error\", reject);\n child.on(\"close\", (code) =>\n Number(code) === 0\n ? resolve(stdout)\n : reject(new Error(stderr || `exit ${code}`))\n );\n });\n\n try {\n return await (opts.timeoutMs\n ? withTimeout(() => exec, opts.timeoutMs)\n : exec);\n } catch (caughtError) {\n try {\n if (os.platform() === \"win32\") {\n child.kill();\n } else if (typeof child.pid === \"number\") {\n child.kill(\"SIGKILL\");\n }\n } catch {}\n if (caughtError instanceof TimeoutError) {\n throw new Error(`${cmd} timed out`);\n }\n throw caughtError;\n }\n};\n\nexport const runExitCode = async (\n cmd: string,\n args: readonly string[],\n opts: Omit<RunTextOptions, \"timeoutMs\"> = {}\n): Promise<number> =>\n new Promise<number>((resolve, reject) => {\n const child = spawn(cmd, [...args], {\n cwd: opts.cwd,\n env: opts.env,\n stdio: \"inherit\",\n shell: false,\n windowsHide: true,\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => resolve(Number(code)));\n });\n\nexport const runWithCapture = async (\n cmd: string,\n args: readonly string[],\n opts: { readonly cwd?: string; readonly env?: NodeJS.ProcessEnv }\n) =>\n new Promise<{ code: number; output: string }>((resolve, reject) => {\n const child = spawn(cmd, [...args], {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: false,\n windowsHide: true,\n });\n let buf = \"\";\n child.stdout?.on(\"data\", (chunk) => {\n buf += String(chunk);\n });\n child.stderr?.on(\"data\", (chunk) => {\n buf += String(chunk);\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => resolve({ code: Number(code), output: buf }));\n });\n", "import * as path from 'node:path';\n\nexport type Action =\n | { readonly type: 'coverage'; readonly coverageValue: boolean }\n | { readonly type: 'coverageUi'; readonly value: 'jest' | 'both' }\n | { readonly type: 'coverageAbortOnFailure'; readonly value: boolean }\n | { readonly type: 'jestArg'; readonly value: string }\n | { readonly type: 'jestArgs'; readonly values: readonly string[] }\n | { readonly type: 'vitestArg'; readonly value: string }\n | { readonly type: 'bothArg'; readonly value: string }\n | { readonly type: 'selectionHint' }\n | { readonly type: 'coverageInclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageExclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageEditor'; readonly value: string }\n | { readonly type: 'coverageRoot'; readonly value: string }\n | { readonly type: 'selectionPath'; readonly value: string }\n | { readonly type: 'coverageDetail'; readonly value?: number | 'all' }\n | { readonly type: 'coverageShowCode'; readonly value: boolean }\n | { readonly type: 'coverageMode'; readonly value: 'compact' | 'full' }\n | { readonly type: 'coverageMaxFiles'; readonly value: number }\n | { readonly type: 'coverageMaxHotspots'; readonly value: number }\n | { readonly type: 'coveragePageFit'; readonly value: boolean };\n\nexport const ActionBuilders = {\n coverage: (coverageValue: boolean): Action => ({ type: 'coverage', coverageValue }),\n coverageUi: (value: 'jest' | 'both'): Action => ({ type: 'coverageUi', value }),\n coverageAbortOnFailure: (value: boolean): Action => ({ type: 'coverageAbortOnFailure', value }),\n jestArg: (value: string): Action => ({ type: 'jestArg', value }),\n jestArgs: (values: readonly string[]): Action => ({ type: 'jestArgs', values }),\n vitestArg: (value: string): Action => ({ type: 'vitestArg', value }),\n bothArg: (value: string): Action => ({ type: 'bothArg', value }),\n selectionHint: (): Action => ({ type: 'selectionHint' }),\n coverageInclude: (values: readonly string[]): Action => ({ type: 'coverageInclude', values }),\n coverageExclude: (values: readonly string[]): Action => ({ type: 'coverageExclude', values }),\n coverageEditor: (value: string): Action => ({ type: 'coverageEditor', value }),\n coverageRoot: (value: string): Action => ({ type: 'coverageRoot', value }),\n selectionPath: (value: string): Action => ({ type: 'selectionPath', value }),\n coverageDetail: (value?: number | 'all'): Action =>\n value !== undefined ? { type: 'coverageDetail', value } : { type: 'coverageDetail' },\n coverageShowCode: (value: boolean): Action => ({ type: 'coverageShowCode', value }),\n coverageMode: (value: 'compact' | 'full'): Action => ({ type: 'coverageMode', value }),\n coverageMaxFiles: (value: number): Action => ({ type: 'coverageMaxFiles', value }),\n coverageMaxHotspots: (value: number): Action => ({ type: 'coverageMaxHotspots', value }),\n coveragePageFit: (value: boolean): Action => ({ type: 'coveragePageFit', value }),\n} as const;\n\ntype State = { actions: Action[]; skipNext: boolean };\nexport type Step = readonly [readonly Action[], boolean];\nexport type RuleEnv = { readonly lookahead?: string; readonly jestFlags: ReadonlySet<string> };\ntype Opt<T> = { readonly _tag: 'some'; readonly value: T } | { readonly _tag: 'none' };\nconst Some = <T>(value: T): Opt<T> => ({ _tag: 'some', value });\nconst None: Opt<never> = { _tag: 'none' } as const;\nconst isSome = <T>(opt: Opt<T>): opt is { readonly _tag: 'some'; readonly value: T } =>\n opt._tag === 'some';\n\nconst step = (actions: readonly Action[], skipNext: boolean = false): Step =>\n [actions, skipNext] as const;\n\nexport type Rule = (value: string, env: RuleEnv) => Opt<Step>;\nexport const rule = {\n when:\n (\n predicate: (value: string, env: RuleEnv) => boolean,\n build: (value: string, env: RuleEnv) => Step,\n ): Rule =>\n (value, env) =>\n predicate(value, env) ? Some(build(value, env)) : None,\n eq: (flag: string, build: () => Step): Rule =>\n rule.when(\n (value) => value === flag,\n () => build(),\n ),\n startsWith: (prefix: string, build: (value: string) => Step): Rule =>\n rule.when(\n (value) => value.startsWith(prefix),\n (value) => build(value),\n ),\n inSet: (select: (env: RuleEnv) => ReadonlySet<string>, build: (value: string) => Step): Rule =>\n rule.when(\n (value, env) => select(env).has(value),\n (value) => build(value),\n ),\n withLookahead: (\n lookaheadFlag: string,\n build: (flagToken: string, lookahead: string) => Step,\n ): Rule =>\n rule.when(\n (value, env) =>\n value === lookaheadFlag && typeof env.lookahead === 'string' && env.lookahead.length > 0,\n (value, env) => build(value, env.lookahead!),\n ),\n} as const;\n\nconst STRING_EMPTY = '' as const;\nconst STRING_TRUE = 'true' as const;\nconst STRING_ONE = '1' as const;\nconst INDEX_STEP = 1 as const;\n\nexport const isTruthy = (value: string): boolean =>\n value === STRING_TRUE || value === STRING_ONE || value === STRING_EMPTY;\n\nexport const parseActionsFromTokens = (tokens: readonly string[]): readonly Action[] => {\n const jestOnlyFlags = new Set(['--ci', '--detectOpenHandles', '--forceExit', '--runInBand']);\n\n const parseCoverageUiString = (raw: string): 'jest' | 'both' => {\n const normalized = String(raw).toLowerCase();\n return normalized === 'jest' ? 'jest' : 'both';\n };\n\n const rules: readonly Rule[] = [\n // --coverage (enable), and --coverage=true/false\n rule.eq('--coverage', () => step([ActionBuilders.coverage(true)])),\n rule.startsWith('--coverage=', (value) =>\n step([ActionBuilders.coverage(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()))]),\n ),\n // --coverage.abortOnFailure\n rule.eq('--coverage.abortOnFailure', () => step([ActionBuilders.coverageAbortOnFailure(true)])),\n rule.startsWith('--coverage.abortOnFailure=', (value) =>\n step([\n ActionBuilders.coverageAbortOnFailure(\n isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.abortOnFailure', (_flag, lookahead) =>\n step([ActionBuilders.coverageAbortOnFailure(isTruthy(String(lookahead)))], true),\n ),\n rule.startsWith('--coverage-ui=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.startsWith('--coverageUi=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.withLookahead('--coverage-ui', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n rule.withLookahead('--coverageUi', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n\n rule.eq('--coverage.detail', () => step([ActionBuilders.coverageDetail()])),\n rule.startsWith('--coverage.detail=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)]);\n }),\n rule.withLookahead('--coverage.detail', (_flag, lookahead) => {\n const raw = String(lookahead).trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)], true);\n }),\n\n rule.eq('--coverage.showCode', () => step([ActionBuilders.coverageShowCode(true)])),\n rule.startsWith('--coverage.showCode=', (value) => {\n const flagValue = (value.split('=')[1] ?? '').trim().toLowerCase();\n return step([\n ActionBuilders.coverageShowCode(\n flagValue === 'true' || flagValue === '1' || flagValue === '',\n ),\n ]);\n }),\n rule.withLookahead('--coverage.showCode', (_flag, lookahead) =>\n step([ActionBuilders.coverageShowCode(isTruthy(String(lookahead)))], true),\n ),\n\n rule.startsWith('--coverage.mode=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const mode = raw === 'compact' ? 'compact' : 'full';\n return step([ActionBuilders.coverageMode(mode)]);\n }),\n rule.withLookahead('--coverage.mode', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageMode(\n String(lookahead).trim().toLowerCase() === 'compact' ? 'compact' : 'full',\n ),\n ],\n true,\n ),\n ),\n rule.eq('--coverage.compact', () => step([ActionBuilders.coverageMode('compact')])),\n\n rule.startsWith('--coverage.maxFiles=', (value) => {\n const maxFilesCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxFilesCount) ? [ActionBuilders.coverageMaxFiles(maxFilesCount)] : [],\n );\n }),\n rule.startsWith('--coverage.maxHotspots=', (value) => {\n const maxHotspotsCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxHotspotsCount)\n ? [ActionBuilders.coverageMaxHotspots(maxHotspotsCount)]\n : [],\n );\n }),\n rule.eq('--coverage.pageFit', () => step([ActionBuilders.coveragePageFit(true)])),\n rule.startsWith('--coverage.pageFit=', (value) =>\n step([\n ActionBuilders.coveragePageFit(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase())),\n ]),\n ),\n rule.withLookahead('--coverage.pageFit', (_flag, lookahead) =>\n step([ActionBuilders.coveragePageFit(isTruthy(String(lookahead)))], true),\n ),\n\n rule.withLookahead('--testPathPattern', (flag, lookahead) =>\n step([ActionBuilders.jestArgs([flag, lookahead])], true),\n ),\n rule.startsWith('--testPathPattern=', (value) => step([ActionBuilders.jestArg(value)])),\n rule.inSet(\n (env) => env.jestFlags,\n (value) => step([ActionBuilders.jestArg(value)]),\n ),\n\n rule.when(\n (value) => value === '--watch' || value === '-w',\n () => step([ActionBuilders.vitestArg('--watch'), ActionBuilders.jestArg('--watch')]),\n ),\n rule.eq('--watchAll', () => step([ActionBuilders.jestArg('--watchAll')])),\n\n rule.startsWith('--coverage.include=', (value) =>\n step([\n ActionBuilders.coverageInclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.include', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageInclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.exclude=', (value) =>\n step([\n ActionBuilders.coverageExclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.exclude', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageExclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.editor=', (value) =>\n step([ActionBuilders.coverageEditor((value.split('=')[1] ?? '').trim())]),\n ),\n rule.startsWith('--coverage.root=', (value) =>\n step([ActionBuilders.coverageRoot((value.split('=')[1] ?? '').trim())]),\n ),\n\n rule.withLookahead('-t', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n rule.withLookahead('--testNamePattern', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n ] as const;\n\n const init: State = { actions: [], skipNext: false };\n\n const final = tokens.reduce<State>((state, token, index) => {\n if (state.skipNext) {\n return { actions: state.actions, skipNext: false };\n }\n const tokenValue = token ?? STRING_EMPTY;\n const nextToken = tokens[index + INDEX_STEP];\n let env: RuleEnv = { jestFlags: jestOnlyFlags };\n if (typeof nextToken === 'string' && nextToken.length > 0) {\n env = { jestFlags: jestOnlyFlags, lookahead: nextToken };\n }\n\n const firstMatch = (rs: readonly Rule[], value: string, envForRules: RuleEnv) => {\n for (const ruleFn of rs) {\n const match = ruleFn(value, envForRules);\n if (isSome(match)) {\n return match;\n }\n }\n return None as Opt<Step>;\n };\n\n const matched = firstMatch(rules, tokenValue, env);\n\n const isTestFileToken = (candidate: string) =>\n /\\.(test|spec)\\.[tj]sx?$/.test(candidate) || /(^|\\/)tests?\\//.test(candidate);\n const isPathLike = (candidate: string) =>\n /[\\\\/]/.test(candidate) || /\\.(m?[tj]sx?)$/i.test(candidate);\n\n const [matchedActions, shouldSkipNext] = isSome(matched)\n ? matched.value\n : (() => {\n const base = [ActionBuilders.bothArg(tokenValue)];\n const withSelection =\n isTestFileToken(tokenValue) || isPathLike(tokenValue)\n ? [\n ...base,\n ActionBuilders.selectionHint(),\n ...(isPathLike(tokenValue) ? [ActionBuilders.selectionPath(tokenValue)] : []),\n ]\n : base;\n return step(withSelection);\n })();\n\n return { actions: [...state.actions, ...matchedActions], skipNext: shouldSkipNext };\n }, init);\n\n return final.actions as readonly Action[];\n};\n\nexport type ParsedArgs = {\n readonly vitestArgs: readonly string[];\n readonly jestArgs: readonly string[];\n readonly collectCoverage: boolean;\n readonly coverageUi: 'jest' | 'both';\n readonly coverageAbortOnFailure: boolean;\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode: boolean;\n readonly coverageMode: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit: boolean;\n};\n\ntype Contrib = {\n readonly vitest: readonly string[];\n readonly jest: readonly string[];\n readonly coverage: boolean;\n readonly coverageUi?: ParsedArgs['coverageUi'];\n readonly coverageAbortOnFailure?: boolean;\n readonly selection?: boolean;\n readonly include?: readonly string[];\n readonly exclude?: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly selectionPaths?: readonly string[];\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n};\n\nconst emptyContrib: Contrib = {\n vitest: [],\n jest: [],\n coverage: false,\n coverageDetail: 'auto',\n coverageMode: 'auto',\n};\n\nconst toContrib = (action: Action): Contrib => {\n switch (action.type) {\n case 'coverage':\n return { vitest: [], jest: [], coverage: action.coverageValue };\n case 'coverageUi':\n return { vitest: [], jest: [], coverage: false, coverageUi: action.value };\n case 'coverageAbortOnFailure':\n return { vitest: [], jest: [], coverage: false, coverageAbortOnFailure: action.value };\n case 'jestArgs':\n return { vitest: [], jest: action.values, coverage: false };\n case 'selectionHint':\n return { vitest: [], jest: [], coverage: false, selection: true };\n case 'coverageInclude':\n return { vitest: [], jest: [], coverage: false, include: action.values };\n case 'coverageExclude':\n return { vitest: [], jest: [], coverage: false, exclude: action.values };\n case 'coverageEditor':\n return { vitest: [], jest: [], coverage: false, editorCmd: action.value };\n case 'coverageRoot':\n return { vitest: [], jest: [], coverage: false, workspaceRoot: action.value };\n case 'selectionPath':\n return { vitest: [], jest: [], coverage: false, selectionPaths: [action.value] };\n case 'coverageDetail': {\n const detailValue: Contrib['coverageDetail'] = action.value ?? 'auto';\n return { vitest: [], jest: [], coverage: false, coverageDetail: detailValue };\n }\n case 'coverageShowCode':\n return { vitest: [], jest: [], coverage: false, coverageShowCode: action.value };\n case 'coverageMode':\n return { vitest: [], jest: [], coverage: false, coverageMode: action.value };\n case 'coverageMaxFiles':\n return { vitest: [], jest: [], coverage: false, coverageMaxFiles: action.value };\n case 'coverageMaxHotspots':\n return { vitest: [], jest: [], coverage: false, coverageMaxHotspots: action.value };\n case 'coveragePageFit':\n return { vitest: [], jest: [], coverage: false, coveragePageFit: action.value };\n case 'jestArg':\n return { vitest: [], jest: [action.value], coverage: false };\n case 'vitestArg':\n return { vitest: [action.value], jest: [], coverage: false };\n case 'bothArg':\n return { vitest: [action.value], jest: [action.value], coverage: false };\n default: {\n const neverGuard: never = action;\n return neverGuard;\n }\n }\n};\n\nexport const combineContrib = (left: Contrib, right: Contrib): Contrib => {\n const base: Contrib = {\n vitest: left.vitest.concat(right.vitest),\n jest: left.jest.concat(right.jest),\n coverage: left.coverage || right.coverage,\n include: [...(left.include ?? []), ...(right.include ?? [])],\n exclude: [...(left.exclude ?? []), ...(right.exclude ?? [])],\n selection: Boolean(left.selection || right.selection),\n selectionPaths: [...(left.selectionPaths ?? []), ...(right.selectionPaths ?? [])],\n };\n const next: Contrib = { ...base } as Contrib;\n const editor = right.editorCmd ?? left.editorCmd;\n if (editor !== undefined) {\n (next as unknown as { editorCmd: string }).editorCmd = editor;\n }\n const root = right.workspaceRoot ?? left.workspaceRoot;\n if (root !== undefined) {\n (next as unknown as { workspaceRoot: string }).workspaceRoot = root;\n }\n if (right.coverageUi !== undefined) {\n return { ...next, coverageUi: right.coverageUi } as Contrib;\n }\n if (left.coverageUi !== undefined) {\n return { ...next, coverageUi: left.coverageUi } as Contrib;\n }\n return {\n ...next,\n ...(right.coverageAbortOnFailure !== undefined || left.coverageAbortOnFailure !== undefined\n ? { coverageAbortOnFailure: right.coverageAbortOnFailure ?? left.coverageAbortOnFailure }\n : {}),\n ...(right.coverageDetail !== undefined || left.coverageDetail !== undefined\n ? { coverageDetail: right.coverageDetail ?? left.coverageDetail }\n : {}),\n ...(right.coverageShowCode !== undefined || left.coverageShowCode !== undefined\n ? { coverageShowCode: right.coverageShowCode ?? left.coverageShowCode }\n : {}),\n ...(right.coverageMode !== undefined || left.coverageMode !== undefined\n ? { coverageMode: right.coverageMode ?? left.coverageMode }\n : {}),\n ...(right.coverageMaxFiles !== undefined || left.coverageMaxFiles !== undefined\n ? { coverageMaxFiles: right.coverageMaxFiles ?? left.coverageMaxFiles }\n : {}),\n ...(right.coverageMaxHotspots !== undefined || left.coverageMaxHotspots !== undefined\n ? { coverageMaxHotspots: right.coverageMaxHotspots ?? left.coverageMaxHotspots }\n : {}),\n ...(right.coveragePageFit !== undefined || left.coveragePageFit !== undefined\n ? { coveragePageFit: right.coveragePageFit ?? left.coveragePageFit }\n : {}),\n } as Contrib;\n};\n\nexport const DEFAULT_INCLUDE = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'] as const;\nexport const DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/coverage/**',\n '**/dist/**',\n '**/build/**',\n '**/migrations/**',\n '**/__mocks__/**',\n] as const;\n\nexport const deriveArgs = (argv: readonly string[]): ParsedArgs => {\n const vitestArgs: string[] = ['run'];\n const jestArgs: string[] = ['--detectOpenHandles', '--forceExit', '--runInBand'];\n let collectCoverage = false;\n let coverageUi: ParsedArgs['coverageUi'] = 'both';\n let coverageAbortOnFailure = false;\n let coverageShowCode = Boolean(process.stdout.isTTY);\n let coverageMode: ParsedArgs['coverageMode'] = 'auto';\n const coverageMaxFilesLocalInit: number | undefined = undefined;\n const coverageMaxHotspotsLocalInit: number | undefined = undefined;\n let coverageMaxFilesLocal: number | undefined = coverageMaxFilesLocalInit;\n let coverageMaxHotspotsLocal: number | undefined = coverageMaxHotspotsLocalInit;\n let coveragePageFit = Boolean(process.stdout.isTTY);\n\n const uiEnv = (process.env.COVERAGE_UI ?? '').toLowerCase();\n if (uiEnv === 'both' || uiEnv === 'jest') {\n coverageUi = uiEnv as ParsedArgs['coverageUi'];\n }\n\n const contrib = parseActionsFromTokens(argv).map(toContrib).reduce(combineContrib, emptyContrib);\n vitestArgs.push(...contrib.vitest);\n jestArgs.push(...contrib.jest);\n collectCoverage ||= contrib.coverage;\n coverageUi = contrib.coverageUi ?? coverageUi;\n coverageAbortOnFailure = contrib.coverageAbortOnFailure ?? coverageAbortOnFailure;\n coverageShowCode = contrib.coverageShowCode ?? coverageShowCode;\n const coverageDetailComputed: ParsedArgs['coverageDetail'] | undefined =\n contrib.coverageDetail ?? (contrib.selection ? 'auto' : undefined);\n coverageMode = contrib.coverageMode ?? (contrib.selection ? 'compact' : 'auto');\n coverageMaxFilesLocal = contrib.coverageMaxFiles ?? coverageMaxFilesLocal;\n coverageMaxHotspotsLocal = contrib.coverageMaxHotspots ?? coverageMaxHotspotsLocal;\n coveragePageFit = contrib.coveragePageFit ?? coveragePageFit;\n\n if (collectCoverage) {\n jestArgs.push(\n '--coverage',\n '--coverageProvider=babel',\n '--coverageReporters=lcov',\n '--coverageReporters=json',\n '--coverageReporters=text-summary',\n '--coverageDirectory=coverage/jest',\n );\n }\n\n const selectionLooksLikeTestPath = (contrib.selectionPaths ?? []).some(\n (selectionPath) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(selectionPath) || /(^|\\/)tests?\\//i.test(selectionPath),\n );\n const inferredFromSelection = (contrib.selectionPaths ?? [])\n .map((pathToken) => {\n const normalized = path.normalize(pathToken).replace(/\\\\/g, '/');\n const isDir = !/\\.(m?[tj]sx?)$/i.test(normalized);\n const base = isDir\n ? normalized.replace(/\\/+$/, '')\n : path.dirname(normalized).replace(/\\\\/g, '/');\n return base.length ? `${base}/**/*` : '**/*';\n })\n .filter((glob, index, arr) => arr.indexOf(glob) === index);\n\n const includeGlobs = (contrib.include ?? []).length\n ? (contrib.include as string[])\n : selectionLooksLikeTestPath\n ? [...DEFAULT_INCLUDE]\n : inferredFromSelection.length\n ? inferredFromSelection\n : [...DEFAULT_INCLUDE];\n const excludeGlobs = (contrib.exclude ?? []).length\n ? (contrib.exclude as string[])\n : [...DEFAULT_EXCLUDE];\n\n const out: ParsedArgs = {\n vitestArgs,\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified: Boolean(contrib.selection),\n selectionPaths: [...(contrib.selectionPaths ?? [])],\n includeGlobs,\n excludeGlobs,\n coverageShowCode,\n ...(coverageDetailComputed !== undefined ? { coverageDetail: coverageDetailComputed } : {}),\n coverageMode,\n ...(coverageMaxFilesLocal !== undefined ? { coverageMaxFiles: coverageMaxFilesLocal } : {}),\n ...(coverageMaxHotspotsLocal !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsLocal }\n : {}),\n coveragePageFit,\n ...(contrib.editorCmd !== undefined ? { editorCmd: contrib.editorCmd } : {}),\n ...(contrib.workspaceRoot !== undefined ? { workspaceRoot: contrib.workspaceRoot } : {}),\n };\n return out;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\n\nconst TailSegmentCount = 2 as const;\nconst EmptyCount = 0 as const;\nconst JsonIndentSpaces = 2 as const;\n\nexport const DEFAULT_TEST_GLOBS = [\n \"**/*.{test,spec}.{ts,tsx,js,jsx}\",\n \"tests/**/*.{ts,tsx,js,jsx}\",\n] as const;\n\nexport type FindRelatedOpts = {\n readonly repoRoot: string;\n readonly productionPaths: readonly string[];\n readonly testGlobs?: readonly string[];\n readonly excludeGlobs?: readonly string[];\n readonly timeoutMs?: number;\n};\n\nexport const findRelatedTestsFast = async (\n opts: FindRelatedOpts\n): Promise<readonly string[]> => {\n const repoRoot = path.resolve(opts.repoRoot);\n const testGlobs = opts.testGlobs ?? DEFAULT_TEST_GLOBS;\n const excludeGlobs = opts.excludeGlobs ?? [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/.next/**\",\n ];\n\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRoot, abs).replace(/\\\\/g, \"/\");\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, \"\");\n const base = path.basename(withoutExt);\n const segs = withoutExt.split(\"/\");\n const tail2 = segs.slice(-TailSegmentCount).join(\"/\");\n const uniq = Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));\n return uniq;\n };\n\n const seeds = Array.from(\n new Set(\n opts.productionPaths\n .map((productionPath) => path.resolve(productionPath))\n .flatMap(toSeeds)\n )\n );\n if (seeds.length === EmptyCount) {\n return [] as string[];\n }\n\n try {\n const rgVersion = await runText(\"rg\", [\"--version\"], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n });\n if (!rgVersion) {\n return [] as string[];\n }\n } catch {\n return [] as string[];\n }\n\n const args: string[] = [\"-n\", \"-l\", \"-S\", \"-F\"];\n testGlobs.forEach((globPattern) => args.push(\"-g\", globPattern));\n excludeGlobs.forEach((excludeGlobPattern) =>\n args.push(\"-g\", `!${excludeGlobPattern}`)\n );\n seeds.forEach((seedToken) => args.push(\"-e\", seedToken));\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", [...args, repoRoot], {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n });\n } catch {\n raw = \"\";\n }\n\n const lines = raw\n .split(/\\r?\\n/)\n .map((lineText) => lineText.trim())\n .filter(Boolean);\n\n const looksLikeTest = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n\n const absolute = lines\n .map((relativePath) =>\n path.resolve(repoRoot, relativePath).replace(/\\\\/g, \"/\")\n )\n .filter(looksLikeTest);\n\n const uniq = Array.from(new Set(absolute));\n const results: string[] = [];\n await Promise.all(\n uniq.map(async (absolutePath) => {\n try {\n await fs.access(absolutePath);\n results.push(absolutePath);\n } catch {\n /* ignore */\n }\n })\n );\n return results;\n};\n\nexport const cachedRelated = async (opts: {\n readonly repoRoot: string;\n readonly selectionKey: string;\n readonly compute: () => Promise<readonly string[]>;\n}): Promise<readonly string[]> => {\n const cacheDir = path.join(opts.repoRoot, \".cache\");\n const cacheFile = path.join(cacheDir, \"relevant-tests.json\");\n\n let head = \"nogit\";\n try {\n const raw = await runText(\n \"git\",\n [\"-C\", opts.repoRoot, \"rev-parse\", \"--short\", \"HEAD\"],\n {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n }\n );\n head = raw.trim() || \"nogit\";\n } catch {\n head = \"nogit\";\n }\n\n const key = `${head}::${opts.selectionKey}`;\n\n let bag: Record<string, string[]> = {};\n try {\n const read = await fs.readFile(cacheFile, \"utf8\");\n bag = JSON.parse(read) as Record<string, string[]>;\n } catch {\n bag = {};\n }\n\n const hit = bag[key];\n if (hit?.length) {\n // Validate cached paths still exist on disk; if any are missing, recompute\n const existing: string[] = [];\n await Promise.all(\n hit.map(async (candidatePath) => {\n try {\n await fs.access(candidatePath);\n existing.push(candidatePath);\n } catch {\n // missing \u2192 ignore; will trigger recompute below\n }\n })\n );\n if (existing.length === hit.length) {\n return existing as readonly string[];\n }\n // One or more cached entries are stale; recompute and refresh cache\n const recomputed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(recomputed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(\n cacheFile,\n JSON.stringify(next, null, JsonIndentSpaces)\n );\n } catch {\n /* ignore cache write errors */\n }\n return recomputed as readonly string[];\n }\n\n const computed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(computed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(cacheFile, JSON.stringify(next, null, JsonIndentSpaces));\n } catch {\n /* ignore cache write errors */\n }\n return computed;\n};\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.exports.ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n isSpaceSeparator (c) {\n return typeof c === 'string' && unicode.Space_Separator.test(c)\n },\n\n isIdStartChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c === '$') || (c === '_') ||\n unicode.ID_Start.test(c)\n )\n },\n\n isIdContinueChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c >= '0' && c <= '9') ||\n (c === '$') || (c === '_') ||\n (c === '\\u200C') || (c === '\\u200D') ||\n unicode.ID_Continue.test(c)\n )\n },\n\n isDigit (c) {\n return typeof c === 'string' && /[0-9]/.test(c)\n },\n\n isHexDigit (c) {\n return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n source = String(text)\n parseState = 'start'\n stack = []\n pos = 0\n line = 1\n column = 0\n token = undefined\n key = undefined\n root = undefined\n\n do {\n token = lex()\n\n // This code is unreachable.\n // if (!parseStates[parseState]) {\n // throw invalidParseState()\n // }\n\n parseStates[parseState]()\n } while (token.type !== 'eof')\n\n if (typeof reviver === 'function') {\n return internalize({'': root}, '', reviver)\n }\n\n return root\n}\n\nfunction internalize (holder, name, reviver) {\n const value = holder[name]\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const key = String(i)\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n } else {\n for (const key in value) {\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n }\n\n return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n lexState = 'default'\n buffer = ''\n doubleQuote = false\n sign = 1\n\n for (;;) {\n c = peek()\n\n // This code is unreachable.\n // if (!lexStates[lexState]) {\n // throw invalidLexState(lexState)\n // }\n\n const token = lexStates[lexState]()\n if (token) {\n return token\n }\n }\n}\n\nfunction peek () {\n if (source[pos]) {\n return String.fromCodePoint(source.codePointAt(pos))\n }\n}\n\nfunction read () {\n const c = peek()\n\n if (c === '\\n') {\n line++\n column = 0\n } else if (c) {\n column += c.length\n } else {\n column++\n }\n\n if (c) {\n pos += c.length\n }\n\n return c\n}\n\nconst lexStates = {\n default () {\n switch (c) {\n case '\\t':\n case '\\v':\n case '\\f':\n case ' ':\n case '\\u00A0':\n case '\\uFEFF':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n return\n\n case '/':\n read()\n lexState = 'comment'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n if (util.isSpaceSeparator(c)) {\n read()\n return\n }\n\n // This code is unreachable.\n // if (!lexStates[parseState]) {\n // throw invalidLexState(parseState)\n // }\n\n return lexStates[parseState]()\n },\n\n comment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineComment'\n return\n\n case '/':\n read()\n lexState = 'singleLineComment'\n return\n }\n\n throw invalidChar(read())\n },\n\n multiLineComment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineCommentAsterisk'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n },\n\n multiLineCommentAsterisk () {\n switch (c) {\n case '*':\n read()\n return\n\n case '/':\n read()\n lexState = 'default'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n lexState = 'multiLineComment'\n },\n\n singleLineComment () {\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n lexState = 'default'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n read()\n },\n\n value () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n case 'n':\n read()\n literal('ull')\n return newToken('null', null)\n\n case 't':\n read()\n literal('rue')\n return newToken('boolean', true)\n\n case 'f':\n read()\n literal('alse')\n return newToken('boolean', false)\n\n case '-':\n case '+':\n if (read() === '-') {\n sign = -1\n }\n\n lexState = 'sign'\n return\n\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n buffer = ''\n lexState = 'string'\n return\n }\n\n throw invalidChar(read())\n },\n\n identifierNameStartEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n break\n\n default:\n if (!util.isIdStartChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n identifierName () {\n switch (c) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n buffer += read()\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameEscape'\n return\n }\n\n if (util.isIdContinueChar(c)) {\n buffer += read()\n return\n }\n\n return newToken('identifier', buffer)\n },\n\n identifierNameEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n break\n\n default:\n if (!util.isIdContinueChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n sign () {\n switch (c) {\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', sign * Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n }\n\n throw invalidChar(read())\n },\n\n zero () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n\n case 'x':\n case 'X':\n buffer += read()\n lexState = 'hexadecimal'\n return\n }\n\n return newToken('numeric', sign * 0)\n },\n\n decimalInteger () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalPointLeading () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalPoint () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalFraction () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalExponent () {\n switch (c) {\n case '+':\n case '-':\n buffer += read()\n lexState = 'decimalExponentSign'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentSign () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentInteger () {\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n hexadecimal () {\n if (util.isHexDigit(c)) {\n buffer += read()\n lexState = 'hexadecimalInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n hexadecimalInteger () {\n if (util.isHexDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n string () {\n switch (c) {\n case '\\\\':\n read()\n buffer += escape()\n return\n\n case '\"':\n if (doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case \"'\":\n if (!doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case '\\n':\n case '\\r':\n throw invalidChar(read())\n\n case '\\u2028':\n case '\\u2029':\n separatorChar(c)\n break\n\n case undefined:\n throw invalidChar(read())\n }\n\n buffer += read()\n },\n\n start () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n // This code is unreachable since the default lexState handles eof.\n // case undefined:\n // return newToken('eof')\n }\n\n lexState = 'value'\n },\n\n beforePropertyName () {\n switch (c) {\n case '$':\n case '_':\n buffer = read()\n lexState = 'identifierName'\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameStartEscape'\n return\n\n case '}':\n return newToken('punctuator', read())\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n lexState = 'string'\n return\n }\n\n if (util.isIdStartChar(c)) {\n buffer += read()\n lexState = 'identifierName'\n return\n }\n\n throw invalidChar(read())\n },\n\n afterPropertyName () {\n if (c === ':') {\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforePropertyValue () {\n lexState = 'value'\n },\n\n afterPropertyValue () {\n switch (c) {\n case ',':\n case '}':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforeArrayValue () {\n if (c === ']') {\n return newToken('punctuator', read())\n }\n\n lexState = 'value'\n },\n\n afterArrayValue () {\n switch (c) {\n case ',':\n case ']':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n end () {\n // This code is unreachable since it's handled by the default lexState.\n // if (c === undefined) {\n // read()\n // return newToken('eof')\n // }\n\n throw invalidChar(read())\n },\n}\n\nfunction newToken (type, value) {\n return {\n type,\n value,\n line,\n column,\n }\n}\n\nfunction literal (s) {\n for (const c of s) {\n const p = peek()\n\n if (p !== c) {\n throw invalidChar(read())\n }\n\n read()\n }\n}\n\nfunction escape () {\n const c = peek()\n switch (c) {\n case 'b':\n read()\n return '\\b'\n\n case 'f':\n read()\n return '\\f'\n\n case 'n':\n read()\n return '\\n'\n\n case 'r':\n read()\n return '\\r'\n\n case 't':\n read()\n return '\\t'\n\n case 'v':\n read()\n return '\\v'\n\n case '0':\n read()\n if (util.isDigit(peek())) {\n throw invalidChar(read())\n }\n\n return '\\0'\n\n case 'x':\n read()\n return hexEscape()\n\n case 'u':\n read()\n return unicodeEscape()\n\n case '\\n':\n case '\\u2028':\n case '\\u2029':\n read()\n return ''\n\n case '\\r':\n read()\n if (peek() === '\\n') {\n read()\n }\n\n return ''\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n throw invalidChar(read())\n\n case undefined:\n throw invalidChar(read())\n }\n\n return read()\n}\n\nfunction hexEscape () {\n let buffer = ''\n let c = peek()\n\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n let buffer = ''\n let count = 4\n\n while (count-- > 0) {\n const c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n }\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n start () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforePropertyName () {\n switch (token.type) {\n case 'identifier':\n case 'string':\n key = token.value\n parseState = 'afterPropertyName'\n return\n\n case 'punctuator':\n // This code is unreachable since it's handled by the lexState.\n // if (token.value !== '}') {\n // throw invalidToken()\n // }\n\n pop()\n return\n\n case 'eof':\n throw invalidEOF()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterPropertyName () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator' || token.value !== ':') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n parseState = 'beforePropertyValue'\n },\n\n beforePropertyValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforeArrayValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n if (token.type === 'punctuator' && token.value === ']') {\n pop()\n return\n }\n\n push()\n },\n\n afterPropertyValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforePropertyName'\n return\n\n case '}':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterArrayValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforeArrayValue'\n return\n\n case ']':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n end () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'eof') {\n // throw invalidToken()\n // }\n },\n}\n\nfunction push () {\n let value\n\n switch (token.type) {\n case 'punctuator':\n switch (token.value) {\n case '{':\n value = {}\n break\n\n case '[':\n value = []\n break\n }\n\n break\n\n case 'null':\n case 'boolean':\n case 'numeric':\n case 'string':\n value = token.value\n break\n\n // This code is unreachable.\n // default:\n // throw invalidToken()\n }\n\n if (root === undefined) {\n root = value\n } else {\n const parent = stack[stack.length - 1]\n if (Array.isArray(parent)) {\n parent.push(value)\n } else {\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n\n if (value !== null && typeof value === 'object') {\n stack.push(value)\n\n if (Array.isArray(value)) {\n parseState = 'beforeArrayValue'\n } else {\n parseState = 'beforePropertyName'\n }\n } else {\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n }\n}\n\nfunction pop () {\n stack.pop()\n\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n// return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n// return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n if (c === undefined) {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n }\n\n return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n// if (token.type === 'eof') {\n// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n// }\n\n// const c = String.fromCodePoint(token.value.codePointAt(0))\n// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n column -= 5\n return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n if (replacements[c]) {\n return replacements[c]\n }\n\n if (c < ' ') {\n const hexString = c.charCodeAt(0).toString(16)\n return '\\\\x' + ('00' + hexString).substring(hexString.length)\n }\n\n return c\n}\n\nfunction syntaxError (message) {\n const err = new SyntaxError(message)\n err.lineNumber = line\n err.columnNumber = column\n return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n const stack = []\n let indent = ''\n let propertyList\n let replacerFunc\n let gap = ''\n let quote\n\n if (\n replacer != null &&\n typeof replacer === 'object' &&\n !Array.isArray(replacer)\n ) {\n space = replacer.space\n quote = replacer.quote\n replacer = replacer.replacer\n }\n\n if (typeof replacer === 'function') {\n replacerFunc = replacer\n } else if (Array.isArray(replacer)) {\n propertyList = []\n for (const v of replacer) {\n let item\n\n if (typeof v === 'string') {\n item = v\n } else if (\n typeof v === 'number' ||\n v instanceof String ||\n v instanceof Number\n ) {\n item = String(v)\n }\n\n if (item !== undefined && propertyList.indexOf(item) < 0) {\n propertyList.push(item)\n }\n }\n }\n\n if (space instanceof Number) {\n space = Number(space)\n } else if (space instanceof String) {\n space = String(space)\n }\n\n if (typeof space === 'number') {\n if (space > 0) {\n space = Math.min(10, Math.floor(space))\n gap = ' '.substr(0, space)\n }\n } else if (typeof space === 'string') {\n gap = space.substr(0, 10)\n }\n\n return serializeProperty('', {'': value})\n\n function serializeProperty (key, holder) {\n let value = holder[key]\n if (value != null) {\n if (typeof value.toJSON5 === 'function') {\n value = value.toJSON5(key)\n } else if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n }\n\n if (replacerFunc) {\n value = replacerFunc.call(holder, key, value)\n }\n\n if (value instanceof Number) {\n value = Number(value)\n } else if (value instanceof String) {\n value = String(value)\n } else if (value instanceof Boolean) {\n value = value.valueOf()\n }\n\n switch (value) {\n case null: return 'null'\n case true: return 'true'\n case false: return 'false'\n }\n\n if (typeof value === 'string') {\n return quoteString(value, false)\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'object') {\n return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n }\n\n return undefined\n }\n\n function quoteString (value) {\n const quotes = {\n \"'\": 0.1,\n '\"': 0.2,\n }\n\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n let product = ''\n\n for (let i = 0; i < value.length; i++) {\n const c = value[i]\n switch (c) {\n case \"'\":\n case '\"':\n quotes[c]++\n product += c\n continue\n\n case '\\0':\n if (util.isDigit(value[i + 1])) {\n product += '\\\\x00'\n continue\n }\n }\n\n if (replacements[c]) {\n product += replacements[c]\n continue\n }\n\n if (c < ' ') {\n let hexString = c.charCodeAt(0).toString(16)\n product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n continue\n }\n\n product += c\n }\n\n const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n return quoteChar + product + quoteChar\n }\n\n function serializeObject (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let keys = propertyList || Object.keys(value)\n let partial = []\n for (const key of keys) {\n const propertyString = serializeProperty(key, value)\n if (propertyString !== undefined) {\n let member = serializeKey(key) + ':'\n if (gap !== '') {\n member += ' '\n }\n member += propertyString\n partial.push(member)\n }\n }\n\n let final\n if (partial.length === 0) {\n final = '{}'\n } else {\n let properties\n if (gap === '') {\n properties = partial.join(',')\n final = '{' + properties + '}'\n } else {\n let separator = ',\\n' + indent\n properties = partial.join(separator)\n final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n\n function serializeKey (key) {\n if (key.length === 0) {\n return quoteString(key, true)\n }\n\n const firstChar = String.fromCodePoint(key.codePointAt(0))\n if (!util.isIdStartChar(firstChar)) {\n return quoteString(key, true)\n }\n\n for (let i = firstChar.length; i < key.length; i++) {\n if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n return quoteString(key, true)\n }\n }\n\n return key\n }\n\n function serializeArray (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let partial = []\n for (let i = 0; i < value.length; i++) {\n const propertyString = serializeProperty(String(i), value)\n partial.push((propertyString !== undefined) ? propertyString : 'null')\n }\n\n let final\n if (partial.length === 0) {\n final = '[]'\n } else {\n if (gap === '') {\n let properties = partial.join(',')\n final = '[' + properties + ']'\n } else {\n let separator = ',\\n' + indent\n let properties = partial.join(separator)\n final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n parse,\n stringify,\n}\n\nmodule.exports = JSON5\n", "/* eslint-disable no-continue */\n/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport * as fsSync from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as fs from \"node:fs/promises\";\n\nimport * as LibReport from \"istanbul-lib-report\";\nimport * as Reports from \"istanbul-reports\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runExitCode, runText, runWithCapture } from \"./_exec\";\nimport { deriveArgs } from \"./args\";\nimport {\n findRepoRoot,\n argsForDiscovery,\n discoverJestResilient,\n filterCandidatesForProject,\n decideShouldRunJest,\n} from \"./discovery\";\nimport { readCoverageJson, filterCoverageMap } from \"./coverage-core\";\nimport {\n printPerFileCompositeTables,\n printCompactCoverage,\n printDetailedCoverage,\n} from \"./coverage-print\";\nimport {\n JEST_BRIDGE_REPORTER_SOURCE,\n renderVitestFromJestJSON,\n coerceJestJsonToBridge,\n formatJestOutputVitest,\n} from \"./jest-bridge\";\nimport { stripAnsiSimple } from \"./stacks\";\nimport { tintPct } from \"./bars\";\nimport { selectDirectTestsForProduction } from \"./graph-distance\";\n\nconst jestBin = \"./node_modules/.bin/jest\";\nconst babelNodeBin = \"./node_modules/.bin/babel-node\";\nconst moduleSpecifierForRequire =\n // @ts-ignore\n typeof __filename !== \"undefined\" ? __filename : (import.meta as any).url;\nconst requireCjs = createRequire(moduleSpecifierForRequire);\n\nexport const registerSignalHandlersOnce = () => {\n let handled = false;\n const on = (sig: NodeJS.Signals) => {\n if (handled) {\n return;\n }\n handled = true;\n process.stdout.write(`\\nReceived ${sig}, exiting...\\n`);\n process.exit(130);\n };\n process.once(\"SIGINT\", on);\n process.once(\"SIGTERM\", on);\n};\n\nconst isDebug = (): boolean =>\n Boolean(\n (process.env as unknown as { TEST_CLI_DEBUG?: string }).TEST_CLI_DEBUG\n );\n\nexport const mergeLcov = async (): Promise<void> => {\n const jestLcovPath = \"coverage/jest/lcov.info\";\n const vitestLcovPath = \"coverage/vitest/lcov.info\";\n const mergedOutPath = \"coverage/lcov.info\";\n const readOrEmpty = async (filePath: string) => {\n try {\n return await (\n await import(\"node:fs/promises\")\n ).readFile(filePath, \"utf8\");\n } catch {\n return \"\";\n }\n };\n let vitestContent = \"\";\n let jestContent = \"\";\n try {\n vitestContent = await readOrEmpty(vitestLcovPath);\n } catch (readVitestError) {\n if (isDebug()) {\n console.info(`read vitest lcov failed: ${String(readVitestError)}`);\n }\n }\n try {\n jestContent = await readOrEmpty(jestLcovPath);\n } catch (readJestError) {\n if (isDebug()) {\n console.info(`read jest lcov failed: ${String(readJestError)}`);\n }\n }\n if (!vitestContent && !jestContent) {\n if (isDebug()) {\n console.info(\"No coverage outputs found to merge.\");\n }\n return;\n }\n const merged = [vitestContent.trim(), jestContent.trim()]\n .filter(Boolean)\n .join(\"\\n\");\n if (merged.length > 0) {\n await (\n await import(\"node:fs/promises\")\n ).mkdir(\"coverage\", { recursive: true });\n await (\n await import(\"node:fs/promises\")\n ).writeFile(mergedOutPath, `${merged}\\n`, \"utf8\");\n if (isDebug()) {\n console.info(`Merged coverage written to ${mergedOutPath}`);\n }\n } else if (isDebug()) {\n console.info(\"Coverage files existed but were empty; nothing to merge.\");\n }\n};\n\nexport const emitMergedCoverage = async (\n ui: \"jest\" | \"both\",\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly workspaceRoot?: string;\n readonly editorCmd?: string;\n readonly coverageDetail?: number | \"all\" | \"auto\";\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: \"compact\" | \"full\" | \"auto\";\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n readonly executedTests?: readonly string[];\n }\n): Promise<void> => {\n const jestJson = path.join(\"coverage\", \"jest\", \"coverage-final.json\");\n const jSize = fsSync.existsSync(jestJson)\n ? fsSync.statSync(jestJson).size\n : -1;\n const jestSizeLabel = jSize >= 0 ? `${jSize} bytes` : \"missing\";\n if (isDebug()) {\n console.info(`Coverage JSON probe \u2192 jest: ${jestSizeLabel}`);\n }\n const jestData = await readCoverageJson(jestJson);\n const jestFilesCount = Object.keys(jestData).length;\n if (isDebug()) {\n console.info(`Decoded coverage entries \u2192 jest: ${jestFilesCount}`);\n }\n const { createCoverageMap } = requireCjs(\n \"istanbul-lib-coverage\"\n ) as typeof import(\"istanbul-lib-coverage\");\n const map = createCoverageMap({});\n if (jestFilesCount > 0) {\n try {\n map.merge(jestData);\n } catch (mergeJestError) {\n console.warn(\n `Failed merging jest coverage JSON: ${String(mergeJestError)}`\n );\n }\n }\n if (map.files().length === 0) {\n if (isDebug()) {\n console.info(\n \"No JSON coverage to merge; skipping merged coverage print.\"\n );\n }\n return;\n }\n\n const repoRoot = opts.workspaceRoot ?? (await findRepoRoot());\n\n let filteredMap = filterCoverageMap(map, {\n includes: opts.includeGlobs,\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.warn(\n \"Coverage filters matched 0 files; retrying with include=**/* to avoid empty output.\"\n );\n filteredMap = filterCoverageMap(map, {\n includes: [\"**/*\"],\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.info(\"Coverage present but still no matches; skipping print.\");\n return;\n }\n }\n\n let changedFilesOutput: readonly string[] = [];\n\n try {\n const out = await runText(\n \"git\",\n [\"diff\", \"--name-only\", \"--diff-filter=ACMRTUXB\", \"HEAD\"],\n {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n }\n );\n changedFilesOutput = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((filePathText) => filePathText.replace(/\\\\/g, \"/\"));\n } catch (gitError) {\n console.warn(\n `git diff failed when deriving changed files: ${String(gitError)}`\n );\n }\n\n await printPerFileCompositeTables({\n map: filteredMap,\n root: repoRoot,\n pageFit: opts.coveragePageFit ?? Boolean(process.stdout.isTTY),\n ...(opts.coverageMaxHotspots !== undefined\n ? { maxHotspots: opts.coverageMaxHotspots }\n : {}),\n selectionPaths: opts.selectionPaths ?? [],\n changedFiles: changedFilesOutput,\n executedTests: opts.executedTests ?? [],\n });\n\n const context = LibReport.createContext({\n dir: path.resolve(\"coverage\", \"merged\"),\n coverageMap: filteredMap,\n defaultSummarizer: \"nested\",\n });\n\n const reporters =\n ui === \"jest\"\n ? [Reports.create(\"text\", { file: \"coverage.txt\" })]\n : [\n Reports.create(\"text\", { file: \"coverage.txt\" }),\n Reports.create(\"text-summary\", { file: \"coverage-summary.txt\" }),\n ];\n\n const colorizeIstanbulLine = (lineText: string): string => {\n const separator = /^[-=\\s]+$/;\n if (separator.test(lineText.trim())) {\n return lineText;\n }\n const headerLike = /\\bFile\\b\\s*\\|\\s*%\\s*Stmts\\b/.test(lineText);\n if (headerLike) {\n return lineText;\n }\n if (/^\\s*(Statements|Branches|Functions|Lines)\\s*:/.test(lineText)) {\n // Color the label, percentage, and the raw counts in parens, e.g. ( 822/1816 )\n const updated = lineText.replace(\n /(Statements|Branches|Functions|Lines)(\\s*:\\s*)(\\d+(?:\\.\\d+)?)(%)/,\n (_m, label, sep, num, pct) => {\n const colorize = tintPct(Number(num));\n return `${colorize(label)}${sep}${colorize(`${num}${pct}`)}`;\n }\n );\n return updated.replace(\n /\\(\\s*(\\d+)\\s*\\/\\s*(\\d+)\\s*\\)/,\n (_match, coveredText, totalText) => {\n const percent = (() => {\n const totalCount = Number(totalText);\n const coveredCount = Number(coveredText);\n return totalCount > 0 ? (coveredCount / totalCount) * 100 : 0;\n })();\n const colorize = tintPct(percent);\n return colorize(`( ${coveredText}/${totalText} )`);\n }\n );\n }\n if (lineText.includes(\"|\")) {\n const parts = lineText.split(\"|\");\n if (parts.length >= 2) {\n // Compute row weight from numeric percent columns\n const numericValues: number[] = [];\n for (let index = 1; index < parts.length - 1; index += 1) {\n const value = Number((parts[index] ?? \"\").trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n numericValues.push(value);\n }\n }\n const rowWeight = numericValues.length\n ? Math.min(...numericValues)\n : undefined;\n // Tint each numeric % column\n for (let index = 1; index < parts.length - 1; index += 1) {\n const raw = parts[index] ?? \"\";\n const value = Number(raw.trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n parts[index] = tintPct(value)(raw);\n }\n }\n // Tint the File/Group label and Uncovered column based on row weight\n if (rowWeight !== undefined) {\n parts[0] = tintPct(rowWeight)(parts[0] ?? \"\");\n const lastIndex = parts.length - 1;\n if (lastIndex >= 1) {\n parts[lastIndex] = tintPct(rowWeight)(parts[lastIndex] ?? \"\");\n }\n }\n return parts.join(\"|\");\n }\n }\n return lineText;\n };\n for (const reporter of reporters) {\n reporter.execute(context);\n }\n const textPath = path.resolve(\"coverage\", \"merged\", \"coverage.txt\");\n const summaryPath = path.resolve(\n \"coverage\",\n \"merged\",\n \"coverage-summary.txt\"\n );\n const filesToPrint: string[] = [];\n if (fsSync.existsSync(textPath)) {\n filesToPrint.push(textPath);\n }\n if (fsSync.existsSync(summaryPath)) {\n filesToPrint.push(summaryPath);\n }\n if (filesToPrint.length > 0) {\n for (const filePath of filesToPrint) {\n try {\n const raw = fsSync.readFileSync(filePath, \"utf8\");\n const colored = raw.split(/\\r?\\n/).map(colorizeIstanbulLine).join(\"\\n\");\n process.stdout.write(colored.endsWith(\"\\n\") ? colored : `${colored}\\n`);\n } catch {\n // fall back to raw printing\n try {\n const raw = fsSync.readFileSync(filePath, \"utf8\");\n process.stdout.write(raw.endsWith(\"\\n\") ? raw : `${raw}\\n`);\n } catch {\n /* ignore */\n }\n }\n }\n } else {\n // Fallback: no files created by reporter; run standard reporters to stdout (uncolored)\n const stdoutReporters =\n ui === \"jest\"\n ? [Reports.create(\"text\")]\n : [Reports.create(\"text\"), Reports.create(\"text-summary\")];\n for (const reporter of stdoutReporters) {\n reporter.execute(context);\n }\n }\n\n // Optional deep-dive per-file coverage: only when explicitly requested (not on 'auto')\n const modeResolved: \"compact\" | \"full\" =\n opts.coverageMode && opts.coverageMode !== \"auto\"\n ? opts.coverageMode\n : \"full\";\n const shouldDeepDive =\n opts.coverageDetail !== undefined && opts.coverageDetail !== \"auto\";\n if (shouldDeepDive) {\n if (modeResolved === \"compact\") {\n await printCompactCoverage({\n map: filteredMap,\n root: repoRoot,\n ...(opts.coverageMaxFiles !== undefined\n ? { maxFiles: opts.coverageMaxFiles }\n : {}),\n ...(opts.coverageMaxHotspots !== undefined\n ? { maxHotspots: opts.coverageMaxHotspots }\n : {}),\n ...(opts.coveragePageFit !== undefined\n ? { pageFit: opts.coveragePageFit }\n : {}),\n });\n } else {\n const limit =\n opts.coverageDetail === \"all\" ? \"all\" : (opts.coverageDetail as number);\n await printDetailedCoverage({\n map: filteredMap,\n root: repoRoot,\n limitPerFile: limit,\n showCode: opts.coverageShowCode ?? Boolean(process.stdout.isTTY),\n });\n }\n }\n};\n\nexport const runJestBootstrap = async (): Promise<void> => {\n const npmCmd = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n const code = await runExitCode(npmCmd, [\"run\", \"-s\", \"test:jest:bootstrap\"], {\n env: safeEnv(process.env, {\n NODE_ENV: \"test\",\n }) as unknown as NodeJS.ProcessEnv,\n });\n if (Number(code) !== 0) {\n throw new Error(\"Jest DB bootstrap failed\");\n }\n};\n\nexport const program = async (): Promise<void> => {\n registerSignalHandlersOnce();\n const argv = process.argv.slice(2);\n const {\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n editorCmd,\n workspaceRoot,\n coverageDetail,\n coverageShowCode,\n coverageMode,\n coverageMaxFiles: coverageMaxFilesArg,\n coverageMaxHotspots: coverageMaxHotspotsArg,\n coveragePageFit,\n } = deriveArgs(argv);\n console.info(\n `Selection \u2192 specified=${selectionSpecified} paths=${selectionPaths.length}`\n );\n const { jest } = argsForDiscovery([\"run\"], jestArgs);\n const selectionLooksLikeTest = selectionPaths.some(\n (pathText) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText)\n );\n const selectionLooksLikePath = selectionPaths.some(\n (pathText) => /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText)\n );\n const selectionHasPaths = selectionPaths.length > 0;\n const repoRootForDiscovery = workspaceRoot ?? (await findRepoRoot());\n\n // Expand production selections from bare filenames or repo-root-relative suffixes\n const expandProductionSelections = async (\n tokens: readonly string[],\n repoRoot: string\n ): Promise<readonly string[]> => {\n const results = new Set<string>();\n for (const raw of tokens) {\n const token = String(raw).trim();\n if (!token) {\n continue;\n }\n const isAbs = path.isAbsolute(token);\n const looksLikeRelPath = /[\\\\/]/.test(token);\n let candidateFromRoot: string | undefined;\n if (token.startsWith(\"/\")) {\n candidateFromRoot = path.join(repoRoot, token.slice(1));\n } else if (looksLikeRelPath) {\n candidateFromRoot = path.join(repoRoot, token);\n } else {\n candidateFromRoot = undefined;\n }\n const tryPushIfProd = (absPath: string) => {\n const norm = path.resolve(absPath).replace(/\\\\/g, \"/\");\n const isTest =\n /(^|\\/)tests?\\//i.test(norm) || /\\.(test|spec)\\.[tj]sx?$/i.test(norm);\n if (!isTest && fsSync.existsSync(norm)) {\n results.add(norm);\n }\n };\n if (isAbs && fsSync.existsSync(token)) {\n tryPushIfProd(token);\n continue;\n }\n if (candidateFromRoot && fsSync.existsSync(candidateFromRoot)) {\n tryPushIfProd(candidateFromRoot);\n continue;\n }\n // Use ripgrep to find files whose path ends with the token (filename or suffix)\n try {\n // eslint-disable-next-line no-await-in-loop\n const out = await runText(\"rg\", [\"--files\", \"-g\", `**/${token}`], {\n cwd: repoRoot,\n env: safeEnv(process.env, {\n CI: \"1\",\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 4000,\n });\n const matches = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((rel) => path.resolve(repoRoot, rel).replace(/\\\\/g, \"/\"))\n .filter(\n (abs) =>\n !abs.includes(\"/node_modules/\") &&\n !abs.includes(\"/coverage/\") &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs)\n );\n matches.forEach((abs) => results.add(abs));\n } catch {\n // ignore\n }\n }\n return Array.from(results);\n };\n\n const initialProdSelections = selectionPaths.filter(\n (pathText) =>\n (/[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText)) &&\n !/(^|\\/)tests?\\//i.test(pathText) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(pathText)\n );\n const expandedProdSelections = initialProdSelections.length\n ? initialProdSelections\n : await expandProductionSelections(selectionPaths, repoRootForDiscovery);\n const selectionIncludesProdPaths = expandedProdSelections.length > 0;\n console.info(\n `Selection classify \u2192 looksLikePath=${selectionLooksLikePath} looksLikeTest=${selectionLooksLikeTest} prodPaths=${selectionIncludesProdPaths}`\n );\n const stripPathTokens = (args: readonly string[]) =>\n args.filter((token) => !selectionPaths.includes(token));\n const jestDiscoveryArgs = selectionIncludesProdPaths\n ? stripPathTokens(jest)\n : jest;\n\n const projectConfigs: string[] = [];\n try {\n const baseCfg = path.resolve(\"jest.config.js\");\n const tsCfg = path.resolve(\"jest.ts.config.js\");\n if (fsSync.existsSync(baseCfg)) {\n projectConfigs.push(baseCfg);\n }\n if (fsSync.existsSync(tsCfg)) {\n projectConfigs.push(tsCfg);\n }\n } catch (err) {\n console.warn(`Failed to discover Jest project configs: ${String(err)}`);\n }\n\n const perProjectFiles = new Map<string, string[]>();\n if (selectionIncludesProdPaths) {\n console.info(\n `Discovering (rg-first) \u2192 related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`\n );\n const prodSelections = expandedProdSelections;\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const allTests = await discoverJestResilient(\n [...jestDiscoveryArgs, \"--config\", cfg],\n {\n cwd: cfgCwd,\n }\n );\n let directPerProject: readonly string[] = [];\n try {\n // eslint-disable-next-line no-await-in-loop\n directPerProject = await selectDirectTestsForProduction({\n rootDir: repoRootForDiscovery,\n testFiles: allTests,\n productionFiles: prodSelections,\n });\n } catch (err) {\n if (isDebug()) {\n console.warn(\n `direct selection failed for project ${path.basename(\n cfg\n )}: ${String(err)}`\n );\n }\n }\n perProjectFiles.set(cfg, directPerProject as string[]);\n }\n } else {\n console.info(\n `Discovering \u2192 jestArgs=${jestDiscoveryArgs.join(\n \" \"\n )} | related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`\n );\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const files = await discoverJestResilient(\n [...jestDiscoveryArgs, \"--config\", cfg],\n {\n cwd: cfgCwd,\n }\n );\n perProjectFiles.set(cfg, files as string[]);\n }\n }\n\n const perProjectFiltered = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n const files = perProjectFiles.get(cfg) ?? [];\n const selectionTestPaths = selectionPaths.filter(\n (pathToken) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathToken) ||\n /(^|\\/)tests?\\//i.test(pathToken)\n );\n const candidates =\n selectionHasPaths && selectionLooksLikeTest ? selectionTestPaths : files;\n const absFiles = candidates\n .map((candidatePath) =>\n path.isAbsolute(candidatePath)\n ? candidatePath\n : path.join(repoRootForDiscovery, candidatePath)\n )\n .map((absolutePath) => absolutePath.replace(/\\\\/g, \"/\"));\n // eslint-disable-next-line no-await-in-loop\n const onlyOwned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n absFiles,\n path.dirname(cfg)\n );\n perProjectFiltered.set(cfg, onlyOwned as string[]);\n }\n\n let jestFiles = Array.from(perProjectFiltered.values()).flat();\n console.info(\n `Discovery results \u2192 jest=${jestFiles.length} (projects=${projectConfigs.length})`\n );\n\n const looksLikeTestPath = (candidatePath: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(candidatePath) ||\n /(^|\\/)tests?\\//i.test(candidatePath);\n const prodSelections = expandedProdSelections;\n\n let effectiveJestFiles = jestFiles.slice();\n if (selectionHasPaths && prodSelections.length > 0) {\n console.info(\n `rg related \u2192 prodSelections=${prodSelections.length} (starting)`\n );\n const repoRootForRefinement = workspaceRoot ?? (await findRepoRoot());\n const selectionKey = prodSelections\n .map((absPath) =>\n path.relative(repoRootForRefinement, absPath).replace(/\\\\/g, \"/\")\n )\n .sort((a, b) => a.localeCompare(b))\n .join(\"|\");\n const { cachedRelated, findRelatedTestsFast, DEFAULT_TEST_GLOBS } =\n await import(\"./fast-related\");\n const { DEFAULT_EXCLUDE } = await import(\"./args\");\n const rgMatches = await cachedRelated({\n repoRoot: repoRootForRefinement,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot: repoRootForRefinement,\n productionPaths: prodSelections,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n console.info(`rg candidates \u2192 count=${rgMatches.length}`);\n console.info(\"rg candidates \u2192\");\n const normalizedCandidates = rgMatches.map((candidatePath) =>\n candidatePath.replace(/\\\\/g, \"/\")\n );\n normalizedCandidates.forEach((candidatePath) =>\n console.info(` - ${candidatePath}`)\n );\n const rgSet = new Set(\n rgMatches.map((candidate) => candidate.replace(/\\\\/g, \"/\"))\n );\n if (rgSet.size > 0) {\n if (selectionIncludesProdPaths) {\n // Overwrite jestFiles with rg candidates and re-filter per project ownership\n const rgCandidates = Array.from(rgSet);\n const perProjectFromRg = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n rgCandidates,\n path.dirname(cfg)\n );\n perProjectFromRg.set(cfg, owned as string[]);\n }\n // If ownership filtering lost all candidates,\n // run a content-based import scan on rg candidates to keep only relevant tests\n let totalOwned = Array.from(perProjectFromRg.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg2, owned] of perProjectFromRg.entries()) {\n perProjectFiltered.set(cfg2, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n } else {\n const repoRootForScan = repoRootForDiscovery;\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRootForScan, abs).replace(/\\\\/g, \"/\");\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, \"\");\n const base = path.basename(withoutExt);\n const segs = withoutExt.split(\"/\");\n const tail2 = segs.slice(-2).join(\"/\");\n return Array.from(\n new Set([withoutExt, base, tail2].filter(Boolean))\n );\n };\n const seeds = Array.from(new Set(prodSelections.flatMap(toSeeds)));\n const includesSeed = (text: string) =>\n seeds.some((seed) => text.includes(seed));\n const tryRead = (filePath: string): string => {\n try {\n return fsSync.readFileSync(filePath, \"utf8\");\n } catch {\n return \"\";\n }\n };\n const resolveLocalImport = (\n fromFile: string,\n spec: string\n ): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const cand = path.resolve(baseDir, spec);\n const exts = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\"];\n for (const ext of exts) {\n const full = ext ? `${cand}${ext}` : cand;\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n // index files\n for (const ext of exts) {\n const full = path.join(cand, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n return undefined;\n };\n const importSpecs = (body: string): string[] => {\n const out: string[] = [];\n const importRe = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRe = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n let importMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((importMatch = importRe.exec(body))) {\n out.push(importMatch[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n let requireMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((requireMatch = requireRe.exec(body))) {\n out.push(requireMatch[1]!);\n }\n return out;\n };\n const keptCandidates: string[] = [];\n for (const cand of rgCandidates) {\n const body = tryRead(cand);\n if (includesSeed(body)) {\n keptCandidates.push(cand);\n continue;\n }\n const specs = importSpecs(body).filter(\n (sp) => sp.startsWith(\".\") || sp.startsWith(\"/\")\n );\n let kept = false;\n for (const spec of specs) {\n const target = resolveLocalImport(cand, spec);\n if (!target) {\n continue;\n }\n const tb = tryRead(target);\n if (includesSeed(tb)) {\n kept = true;\n break;\n }\n }\n if (kept) {\n keptCandidates.push(cand);\n }\n }\n if (keptCandidates.length > 0) {\n const perProjectFromScan = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n keptCandidates,\n path.dirname(cfg)\n );\n perProjectFromScan.set(cfg, owned as string[]);\n }\n totalOwned = Array.from(perProjectFromScan.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg, owned] of perProjectFromScan.entries()) {\n perProjectFiltered.set(cfg, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n }\n }\n }\n // If still zero after scan, leave as zero to trigger jest-list fallback later\n // and do NOT assign all candidates to an arbitrary project.\n } else {\n const narrowedJest = effectiveJestFiles.filter((candidate) =>\n rgSet.has(candidate.replace(/\\\\/g, \"/\"))\n );\n if (narrowedJest.length > 0) {\n effectiveJestFiles = narrowedJest;\n }\n }\n }\n if (effectiveJestFiles.length === 0) {\n const repoRoot = repoRootForRefinement;\n const seeds = prodSelections\n .map((abs) =>\n path\n .relative(repoRoot, abs)\n .replace(/\\\\/g, \"/\")\n .replace(/\\.(m?[tj]sx?)$/i, \"\")\n )\n .flatMap((rel) => {\n const base = path.basename(rel);\n const segments = rel.split(\"/\");\n return Array.from(\n new Set([rel, base, segments.slice(-2).join(\"/\")].filter(Boolean))\n );\n });\n\n const includesSeed = (text: string) =>\n seeds.some((seed) => text.includes(seed));\n const tryReadFile = async (absPath: string): Promise<string> => {\n try {\n return await fs.readFile(absPath, \"utf8\");\n } catch {\n return \"\";\n }\n };\n const resolveLocalImport = (\n fromFile: string,\n spec: string\n ): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const candidate = path.resolve(baseDir, spec);\n const extensions = [\n \"\",\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n ];\n for (const ext of extensions) {\n const fullPath = ext ? `${candidate}${ext}` : candidate;\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n for (const ext of extensions) {\n const fullPath = path.join(candidate, `index${ext}`);\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n return undefined;\n };\n const importOrExportSpecs = (body: string): string[] => {\n const results: string[] = [];\n const importRegex = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRegex = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n const exportFromRegex =\n /export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"];?/g;\n let match: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((match = importRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = requireRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = exportFromRegex.exec(body))) {\n results.push(match[1]!);\n }\n return results;\n };\n\n const union = Array.from(new Set<string>(jestFiles));\n const keep = new Set<string>();\n const visitedBodyCache = new Map<string, string>();\n const specCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n\n const getBody = async (absPath: string): Promise<string> => {\n const existing = visitedBodyCache.get(absPath);\n if (existing !== undefined) {\n return existing;\n }\n const content = await tryReadFile(absPath);\n visitedBodyCache.set(absPath, content);\n return content;\n };\n\n const getSpecs = async (absPath: string): Promise<readonly string[]> => {\n const cached = specCache.get(absPath);\n if (cached !== undefined) {\n return cached;\n }\n const body = await getBody(absPath);\n const specs = importOrExportSpecs(body);\n specCache.set(absPath, specs);\n return specs;\n };\n\n const resolveSpec = (\n fromFile: string,\n spec: string\n ): string | undefined => {\n const key = `${fromFile}|${spec}`;\n if (resolutionCache.has(key)) {\n return resolutionCache.get(key);\n }\n const resolved =\n spec.startsWith(\".\") || spec.startsWith(\"/\")\n ? resolveLocalImport(fromFile, spec)\n : undefined;\n resolutionCache.set(key, resolved);\n return resolved;\n };\n\n const MAX_DEPTH = 5;\n const seen = new Set<string>();\n const matchesTransitively = async (\n absTestPath: string,\n depth: number\n ): Promise<boolean> => {\n if (depth > MAX_DEPTH) {\n return false;\n }\n const cacheKey = `${absTestPath}@${depth}`;\n if (seen.has(cacheKey)) {\n return false;\n }\n seen.add(cacheKey);\n const body = await getBody(absTestPath);\n if (includesSeed(body)) {\n return true;\n }\n const specs = await getSpecs(absTestPath);\n for (const spec of specs) {\n const target = resolveSpec(absTestPath, spec);\n if (!target) {\n continue;\n }\n // eslint-disable-next-line no-await-in-loop\n const targetBody = await getBody(target);\n if (includesSeed(targetBody)) {\n return true;\n }\n // eslint-disable-next-line no-await-in-loop\n if (await matchesTransitively(target, depth + 1)) {\n return true;\n }\n }\n return false;\n };\n\n const concurrency = 16;\n let scanIndex = 0;\n const workers: Promise<void>[] = [];\n for (let workerIndex = 0; workerIndex < concurrency; workerIndex += 1) {\n workers.push(\n // eslint-disable-next-line no-loop-func\n (async () => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentIndex = scanIndex;\n if (currentIndex >= union.length) {\n break;\n }\n scanIndex += 1;\n const candidate = union[currentIndex]!;\n // eslint-disable-next-line no-await-in-loop\n const ok = await matchesTransitively(candidate, 0);\n if (ok) {\n keep.add(candidate);\n }\n }\n })()\n );\n }\n await Promise.all(workers);\n\n const jestKept = jestFiles\n .filter((candidate) => keep.has(candidate))\n .sort((left, right) => left.localeCompare(right));\n if (jestKept.length) {\n effectiveJestFiles = jestKept;\n }\n console.info(\n `fallback refine (transitive) \u2192 jest=${effectiveJestFiles.length}`\n );\n }\n }\n\n const jestDecision = decideShouldRunJest([], effectiveJestFiles, {\n selectionSpecified,\n selectionPaths,\n });\n const { shouldRunJest } = jestDecision;\n const jestCount = effectiveJestFiles.length;\n const sharePct = Math.round(jestDecision.share * 100);\n const msg = shouldRunJest\n ? `Jest selected (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`\n : `Skipping Jest (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`;\n console.info(`Discovery \u2192 jest: ${jestCount}. ${msg}`);\n\n if (!shouldRunJest) {\n console.warn(\n \"No matching tests were discovered for either Vitest or Jest.\"\n );\n console.info(\n `Jest args: ${[...jestDiscoveryArgs, \"--listTests\"].join(\" \")}`\n );\n console.info(\n \"Tip: check your -t/--testNamePattern and file path; Jest lists files selected by your patterns.\"\n );\n process.exit(1);\n return;\n }\n\n console.info(\n `Run plan \u2192 Jest maybe=${shouldRunJest} (projects=${projectConfigs.length})`\n );\n let jestExitCode = 0;\n const executedTestFilesSet = new Set<string>();\n if (shouldRunJest) {\n console.info(\"Starting Jest (no Vitest targets)\u2026\");\n await runJestBootstrap();\n const jestRunArgs = selectionIncludesProdPaths\n ? stripPathTokens(jestArgs)\n : jestArgs;\n const projectsToRun = projectConfigs.filter(\n (cfg) => (perProjectFiltered.get(cfg) ?? []).length > 0\n );\n const totalProjectsToRun = projectsToRun.length;\n const stripFooter = (text: string): string => {\n const lines = text.split(\"\\n\");\n const idx = lines.findIndex((ln) =>\n /^Test Files\\s/.test(stripAnsiSimple(ln))\n );\n return idx >= 0 ? lines.slice(0, idx).join(\"\\n\").trimEnd() : text;\n };\n for (let projIndex = 0; projIndex < projectsToRun.length; projIndex += 1) {\n const cfg = projectsToRun[projIndex]!;\n const isLastProject = projIndex === totalProjectsToRun - 1;\n const files = perProjectFiltered.get(cfg) ?? [];\n if (files.length === 0) {\n console.info(\n `Project ${path.basename(\n cfg\n )}: 0 matching tests after filter; skipping.`\n );\n // eslint-disable-next-line no-continue\n continue;\n }\n files.forEach((absTestPath) =>\n executedTestFilesSet.add(path.resolve(absTestPath).replace(/\\\\/g, \"/\"))\n );\n const outJson = path.join(\n os.tmpdir(),\n `jest-bridge-${Date.now()}-${Math.random().toString(36).slice(2)}.json`\n );\n const reporterPath = path.resolve(\"scripts/jest-vitest-bridge.cjs\");\n try {\n if (!fsSync.existsSync(reporterPath)) {\n fsSync.mkdirSync(path.dirname(reporterPath), { recursive: true });\n fsSync.writeFileSync(\n reporterPath,\n JEST_BRIDGE_REPORTER_SOURCE,\n \"utf8\"\n );\n }\n } catch (ensureReporterError) {\n console.warn(\n `Unable to ensure jest bridge reporter: ${String(\n ensureReporterError\n )}`\n );\n }\n // eslint-disable-next-line no-await-in-loop\n // Ensure any explicitly selected paths (tests or production files) are included in coverage\n const selectedFilesForCoverage = selectionPaths\n .filter((pathToken) => /[\\\\/]/.test(pathToken))\n // Avoid restricting coverage to test files when a test path is selected\n .filter((pathToken) => !looksLikeTestPath(pathToken))\n .map((pathToken) =>\n path.relative(repoRootForDiscovery, pathToken).replace(/\\\\\\\\/g, \"/\")\n )\n .filter((rel) => rel && !/^\\.+\\//.test(rel))\n .map((rel) => (rel.startsWith(\"./\") ? rel : `./${rel}`));\n const coverageFromArgs: string[] = [];\n for (const relPath of selectedFilesForCoverage) {\n coverageFromArgs.push(\"--collectCoverageFrom\", relPath);\n }\n\n // eslint-disable-next-line no-await-in-loop\n const { code, output } = await runWithCapture(\n babelNodeBin,\n [\n \"--extensions\",\n \".js,.ts\",\n jestBin,\n \"--config\",\n cfg,\n \"--runTestsByPath\",\n \"--reporters\",\n reporterPath,\n \"--silent\",\n \"--colors\",\n \"--json\",\n \"--outputFile\",\n outJson,\n ...jestRunArgs,\n ...coverageFromArgs,\n \"--passWithNoTests\",\n ...files,\n ],\n {\n env: safeEnv(process.env, {\n NODE_ENV: \"test\",\n JEST_BRIDGE_OUT: outJson,\n FORCE_COLOR: \"3\",\n TERM: process.env.TERM || \"xterm-256color\",\n }) as unknown as NodeJS.ProcessEnv,\n }\n );\n let pretty = \"\";\n try {\n const debug = isDebug();\n if (debug) {\n const capturedLen = output.length;\n console.info(`jest captured output length=${capturedLen}`);\n const fileSizeBytes = fsSync.existsSync(outJson)\n ? fsSync.statSync(outJson).size\n : -1;\n console.info(`bridge json @ ${outJson} size=${fileSizeBytes}`);\n }\n const jsonText = fsSync.readFileSync(outJson, \"utf8\");\n const parsed = JSON.parse(jsonText) as unknown;\n const bridge = coerceJestJsonToBridge(parsed);\n pretty = renderVitestFromJestJSON(bridge, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n });\n if (debug) {\n const preview = pretty.split(\"\\n\").slice(0, 3).join(\"\\n\");\n console.info(\n `pretty preview (json):\\n${preview}${\n pretty.includes(\"\\n\") ? \"\\n\u2026\" : \"\"\n }`\n );\n }\n } catch (jsonErr) {\n const debug = isDebug();\n if (debug) {\n console.info(\n \"renderer: fallback to text prettifier (missing/invalid JSON)\"\n );\n console.info(String(jsonErr));\n console.info(\n `fallback: raw output lines=${output.split(/\\r?\\n/).length}`\n );\n }\n const renderOpts = {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n } as const;\n pretty = formatJestOutputVitest(output, renderOpts);\n if (debug) {\n const preview = pretty.split(\"\\n\").slice(0, 3).join(\"\\n\");\n console.info(\n `pretty preview (text):\\n${preview}${\n pretty.includes(\"\\n\") ? \"\\n\u2026\" : \"\"\n }`\n );\n }\n }\n if (!isLastProject) {\n pretty = stripFooter(pretty);\n }\n if (pretty.trim().length > 0) {\n process.stdout.write(pretty.endsWith(\"\\n\") ? pretty : `${pretty}\\n`);\n }\n if (Number(code) !== 0) {\n jestExitCode = code;\n }\n }\n } else {\n console.info(\"Jest run skipped based on selection and thresholds.\");\n }\n\n // If abort-on-failure is requested for coverage, exit immediately after tests when failing\n if (\n collectCoverage &&\n shouldRunJest &&\n coverageAbortOnFailure &&\n jestExitCode !== 0\n ) {\n process.exit(jestExitCode);\n }\n\n if (collectCoverage && shouldRunJest) {\n await mergeLcov();\n const repoRoot = workspaceRoot ?? (await findRepoRoot());\n const mergedOptsBase = {\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n workspaceRoot: repoRoot,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n ...(coverageDetail !== undefined ? { coverageDetail } : {}),\n ...(coverageShowCode !== undefined ? { coverageShowCode } : {}),\n coverageMode,\n ...(coverageMaxFilesArg !== undefined\n ? { coverageMaxFiles: coverageMaxFilesArg }\n : {}),\n ...(coverageMaxHotspotsArg !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsArg }\n : {}),\n coveragePageFit,\n executedTests: Array.from(executedTestFilesSet),\n } as const;\n await emitMergedCoverage(coverageUi, mergedOptsBase);\n }\n\n const finalExitCode = jestExitCode;\n process.exit(finalExitCode);\n};\n", "/* eslint-disable no-continue */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { DEFAULT_EXCLUDE } from \"./args\";\nimport {\n cachedRelated,\n findRelatedTestsFast,\n DEFAULT_TEST_GLOBS,\n} from \"./fast-related\";\nimport { selectDirectTestsForProduction } from \"./graph-distance\";\n\nexport async function findRepoRoot(): Promise<string> {\n let workingDirectory = process.cwd();\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await fs.stat(path.join(workingDirectory, \".git\"));\n return workingDirectory;\n } catch {\n const parentDirectory = path.dirname(workingDirectory);\n if (parentDirectory === workingDirectory) {\n return process.cwd();\n }\n workingDirectory = parentDirectory;\n }\n }\n}\n\nexport const WATCH_FLAGS = new Set([\"--watch\", \"-w\", \"--watchAll\"]);\n\nexport const argsForDiscovery = (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[]\n) => {\n const COVERAGE_PREFIXES = [\n \"--coverage\",\n \"--coverageReporters\",\n \"--coverageDirectory\",\n \"--coverage.reporter\",\n \"--coverage.reportsDirectory\",\n ] as const;\n const strip = (args: readonly string[]) => {\n const out: string[] = [];\n for (let i = 0; i < args.length; i += 1) {\n const token = args[i]!;\n if (token === \"run\") {\n continue;\n }\n if (WATCH_FLAGS.has(token)) {\n continue;\n }\n const isCoverage =\n COVERAGE_PREFIXES.some(\n (prefix) => token === prefix || token.startsWith(`${prefix}=`)\n ) ||\n (COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length &&\n !String(args[i + 1]).startsWith(\"-\"));\n if (isCoverage) {\n if (\n COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length\n ) {\n i += 1;\n }\n continue;\n }\n out.push(token);\n }\n return out;\n };\n const base = strip(jestArgs);\n const withNoWatchman = base.includes(\"--no-watchman\")\n ? base\n : [...base, \"--no-watchman\"];\n return { vitest: [], jest: withNoWatchman };\n};\n\nexport type FilesObject = { readonly files: readonly string[] };\nexport const isFilesObject = (candidate: unknown): candidate is FilesObject =>\n typeof candidate === \"object\" && candidate !== null && \"files\" in candidate;\n\nexport async function discoverJest(\n jestArgs: readonly string[],\n opts?: {\n readonly relatedPaths?: readonly string[];\n readonly patterns?: readonly string[];\n readonly cwd?: string;\n }\n): Promise<string[]> {\n const hasRelated = Boolean(\n opts?.relatedPaths && opts.relatedPaths.length > 0\n );\n const hasPatterns = Boolean(opts?.patterns && opts.patterns.length > 0);\n // Always include --listTests so stdout is a file list, even when using --findRelatedTests\n const listArgs = [\n ...jestArgs,\n \"--listTests\",\n ...(hasRelated ? ([\"--findRelatedTests\"] as const) : ([] as const)),\n ...(hasRelated\n ? (opts!.relatedPaths as readonly string[]) ?? []\n : ([] as const)),\n ...(hasPatterns\n ? (opts!.patterns as readonly string[]) ?? []\n : ([] as const)),\n ];\n const babelNodeBin = \"./node_modules/.bin/babel-node\";\n const jestBin = \"./node_modules/.bin/jest\";\n const raw = await runText(\n babelNodeBin,\n [\"--extensions\", \".js,.ts\", jestBin, ...listArgs],\n {\n cwd: opts?.cwd ?? process.cwd(),\n env: safeEnv(process.env, {\n CI: \"1\",\n NODE_ENV: \"test\",\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 20000,\n }\n );\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nexport const discoverJestResilient = async (\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<readonly string[]> => {\n try {\n return await discoverJest(jestArgs, opts);\n } catch (err) {\n const msg = String((err as Error)?.message ?? err);\n if (!msg.includes(\"timed out\")) {\n throw err;\n }\n const repoRoot = opts?.cwd ?? (await findRepoRoot());\n const related = opts?.relatedPaths ?? [];\n if (related.length === 0) {\n console.warn(\n \"Jest list timed out and no related production paths were provided; falling back to empty Jest set.\"\n );\n return [] as string[];\n }\n console.warn(\n `Jest list timed out; falling back to ripgrep-based related test discovery for ${related.length} prod path(s).`\n );\n const selectionKey = related\n .map((abs) => path.relative(repoRoot, abs).replace(/\\\\/g, \"/\"))\n .sort()\n .join(\"|\");\n const rgMatches = await cachedRelated({\n repoRoot,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot,\n productionPaths: related,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n const toAbsolutePosix = (candidatePath: string) => {\n const isAbs = path.isAbsolute(candidatePath);\n const absJoined = isAbs\n ? candidatePath\n : path.join(repoRoot, candidatePath);\n return absJoined.replace(/\\\\/g, \"/\");\n };\n const jestCandidates = rgMatches\n .filter((candidatePath) => !/\\.d\\.ts$/.test(candidatePath))\n .map(toAbsolutePosix);\n if (jestCandidates.length === 0) {\n console.info(\"Fallback produced 0 Jest candidates.\");\n } else {\n console.info(\n `Fallback produced ${jestCandidates.length} Jest candidate(s).`\n );\n }\n return jestCandidates as readonly string[];\n }\n};\n\nexport const discoverTargets = async (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<{\n readonly vitestFiles: readonly string[];\n readonly jestFiles: readonly string[];\n}> => {\n const related = opts?.relatedPaths ?? [];\n const cwd = opts?.cwd;\n // If production paths were provided, select tests that directly import them (Group 1)\n if (related.length > 0) {\n const repoRoot = cwd ?? (await findRepoRoot());\n // List all jest tests under config\n let allTests: readonly string[] = [];\n try {\n allTests = await discoverJest(jestArgs, { cwd: repoRoot });\n } catch {\n allTests = [];\n }\n if (allTests.length > 0) {\n const direct = await selectDirectTestsForProduction({\n rootDir: repoRoot,\n testFiles: allTests,\n productionFiles: related,\n });\n console.debug(\n `Direct-related jest tests: ${direct.length} (from ${allTests.length} total)`\n );\n return { vitestFiles: [] as string[], jestFiles: direct };\n }\n }\n const jestOpts = {\n relatedPaths: related,\n ...(cwd !== undefined ? { cwd } : {}),\n } as const;\n const [jestFiles] = await Promise.all([\n discoverJestResilient(jestArgs, jestOpts),\n ]);\n console.debug(`Discovery \u2192 jest: ${jestFiles.length}`);\n return { vitestFiles: [] as string[], jestFiles };\n};\n\nexport const filterCandidatesForProject = async (\n cfgPath: string,\n jestArgs: readonly string[],\n candidates: readonly string[],\n cwd: string\n): Promise<readonly string[]> => {\n if (candidates.length === 0) {\n return [] as const;\n }\n // Use --listTests with relative file patterns only; avoid --findRelatedTests here\n const toPosixNormalized = (inputPath: string) =>\n inputPath.replace(/\\\\/g, \"/\");\n const relativePatterns = candidates\n .map((absOrRel) =>\n path.isAbsolute(absOrRel) ? path.relative(cwd, absOrRel) : absOrRel\n )\n .map(toPosixNormalized);\n\n console.log(\"relativePatterns:\", relativePatterns);\n let attemptPatterns: string[] = [];\n try {\n attemptPatterns = await discoverJest([...jestArgs, \"--config\", cfgPath], {\n patterns: relativePatterns,\n cwd,\n });\n } catch {\n attemptPatterns = [];\n }\n const normalizedAttemptPatterns = attemptPatterns.map((candidatePath) =>\n toPosixNormalized(candidatePath)\n );\n if (normalizedAttemptPatterns.length > 0) {\n return normalizedAttemptPatterns as readonly string[];\n }\n // Fallback: if Jest couldn't list,\n // pass the relative patterns as absolute paths for '--runTestsByPath'\n const absoluteFromRelative = relativePatterns.map((rel) =>\n toPosixNormalized(path.join(cwd, rel))\n );\n return absoluteFromRelative as readonly string[];\n};\n\nexport const decideShouldRunJest = (\n vitestFiles: readonly string[],\n jestFiles: readonly string[],\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n }\n) => {\n const MAX_JEST_FILES = 200;\n const total = vitestFiles.length + jestFiles.length;\n const share = total > 0 ? jestFiles.length / total : 0;\n const looksLikeTestPath = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n const looksLikePath = (pathText: string) =>\n /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText);\n const anyTestSelected = (opts.selectionPaths ?? []).some(looksLikeTestPath);\n const anyPathSelected = (opts.selectionPaths ?? []).some(looksLikePath);\n if (!opts.selectionSpecified) {\n return { shouldRunJest: false, share, reason: \"broad_run_guard\" } as const;\n }\n if (jestFiles.length === 0) {\n return { shouldRunJest: false, share, reason: \"no_jest_tests\" } as const;\n }\n if (vitestFiles.length === 0) {\n return jestFiles.length > MAX_JEST_FILES\n ? ({\n shouldRunJest: false,\n share: 1,\n reason: \"full_suite_guard\",\n } as const)\n : ({ shouldRunJest: true, share: 1, reason: \"only_jest\" } as const);\n }\n const threshold = anyTestSelected ? 0.7 : 0.8;\n if (jestFiles.length > MAX_JEST_FILES) {\n return { shouldRunJest: false, share, reason: \"full_suite_guard\" } as const;\n }\n if (!anyPathSelected) {\n return share >= 0.85\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n }\n return share >= threshold\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n};\n", "import * as path from \"node:path\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\n\nexport type ImportSpecExtractor = (\n absPath: string\n) => Promise<readonly string[]>;\n\n// Regex patterns for ripgrep (kept as raw templates to preserve backslashes)\nconst RG_IMPORT_FROM = String.raw`import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"]`;\nconst RG_REQUIRE = String.raw`require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)`;\nconst RG_EXPORT_FROM = String.raw`export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"]`;\n\nexport const extractImportSpecs: ImportSpecExtractor = async (absPath) => {\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n RG_IMPORT_FROM,\n \"-e\",\n RG_REQUIRE,\n \"-e\",\n RG_EXPORT_FROM,\n absPath,\n ];\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n};\n\nexport const isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Return tests that directly import any of the production files (distance 1).\nexport const selectDirectTestsForProduction = async (opts: {\n readonly rootDir: string;\n readonly testFiles: readonly string[];\n readonly productionFiles: readonly string[];\n}): Promise<readonly string[]> => {\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const prodSet = new Set(\n opts.productionFiles.map((prodPath) =>\n path.resolve(prodPath).replace(/\\\\/g, \"/\")\n )\n );\n const out: string[] = [];\n for (const testAbsRaw of opts.testFiles) {\n const testAbs = path.resolve(testAbsRaw).replace(/\\\\/g, \"/\");\n let specs: readonly string[] = [];\n const cached = specsCache.get(testAbs);\n if (cached !== undefined) {\n specs = cached;\n } else {\n // eslint-disable-next-line no-await-in-loop\n specs = await extractImportSpecs(testAbs);\n specsCache.set(testAbs, specs);\n }\n let direct = false;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n testAbs,\n spec,\n opts.rootDir,\n resolutionCache\n );\n if (resolved && prodSet.has(resolved)) {\n direct = true;\n break;\n }\n }\n if (direct) {\n out.push(testAbs);\n }\n }\n return out;\n};\n", "import * as path from 'node:path';\nimport * as fsSync from 'node:fs';\n\nconst INDEX_NOT_FOUND = -1;\nconst ZERO = 0;\nconst ONE = 1;\n\ntype TsLikePathsConfig = {\n readonly configDir: string;\n readonly baseUrl?: string;\n readonly paths?: Record<string, readonly string[]>;\n};\n\ntype JestAliasConfig = {\n readonly configDir: string;\n readonly mappers: ReadonlyArray<{ pattern: RegExp; target: string }>;\n readonly moduleDirs: ReadonlyArray<string>;\n};\n\ntype BabelAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n readonly roots: ReadonlyArray<string>;\n readonly extensions: ReadonlyArray<string>;\n};\n\ntype ModuleResolverOptions = {\n alias?: Record<string, string>;\n root?: readonly string[];\n extensions?: readonly string[];\n};\n\ntype MetroAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n};\n\nconst tsConfigLookupCache = new Map<string, TsLikePathsConfig | null>();\nconst jestConfigLookupCache = new Map<string, JestAliasConfig | null>();\nconst babelConfigLookupCache = new Map<string, BabelAliasConfig | null>();\nconst metroConfigLookupCache = new Map<string, MetroAliasConfig | null>();\n\nconst FILE_EXTS = [\n '',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.mts',\n '.cts',\n '.json',\n] as const;\n\nexport const tryResolveFile = (candidateBase: string): string | undefined => {\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n try {\n const stat = fsSync.statSync(full);\n if (stat.isFile()) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n } catch {\n // ignore\n }\n }\n }\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n }\n return undefined;\n};\n\nconst JEST_CONFIG_FILENAMES = [\n 'jest.config.js',\n 'jest.config.cjs',\n 'jest.config.mjs',\n 'jest.config.ts',\n 'jest.config.cts',\n];\n\nconst loadNearestJestConfig = (startDir: string, rootDir: string): JestAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = jestConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of JEST_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const mappers: Array<{ pattern: RegExp; target: string }> = [];\n const moduleDirs: string[] = [];\n const mapperBlockMatch = raw.match(/moduleNameMapper\\s*:\\s*\\{([\\s\\S]*?)\\}/m);\n if (mapperBlockMatch) {\n const [, body = ''] = mapperBlockMatch;\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*[\"']([^\"']+)[\"']/g;\n let matchResult: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((matchResult = pairRe.exec(body))) {\n const [, patternSrcRaw, targetRaw] = matchResult as unknown as [string, string, string];\n if (patternSrcRaw && targetRaw) {\n try {\n const pattern = new RegExp(patternSrcRaw);\n mappers.push({ pattern, target: targetRaw });\n } catch {\n // ignore invalid regex entries\n }\n }\n }\n }\n const dirsMatch = raw.match(/moduleDirectories\\s*:\\s*\\[([^\\]]*?)\\]/m);\n if (dirsMatch) {\n const [, arr = ''] = dirsMatch;\n const strRe = /[\"']([^\"']+)[\"']/g;\n let dirMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((dirMatch = strRe.exec(arr))) {\n const [, capturedDirRaw] = dirMatch as unknown as [string, string];\n if (capturedDirRaw && capturedDirRaw.length > ZERO) {\n moduleDirs.push(capturedDirRaw);\n }\n }\n }\n const cfg: JestAliasConfig = {\n configDir: path.dirname(filePath),\n mappers,\n moduleDirs,\n };\n jestConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n jestConfigLookupCache.set(cur, null);\n return null;\n }\n }\n jestConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyJestMappings = (spec: string, cfg: JestAliasConfig): string | undefined => {\n for (const mapping of cfg.mappers) {\n const { pattern, target } = mapping;\n if (pattern.test(spec)) {\n const replacedRoot = target.replace(/<rootDir>/g, cfg.configDir);\n const candidate = spec.replace(pattern, replacedRoot);\n const res = tryResolveFile(candidate);\n if (res) {\n return res;\n }\n }\n }\n for (const dir of cfg.moduleDirs) {\n if (dir !== 'node_modules') {\n const base = path.isAbsolute(dir) ? dir : path.resolve(cfg.configDir, dir);\n const res = tryResolveFile(path.join(base, spec));\n if (res) {\n return res;\n }\n }\n }\n return undefined;\n};\n\nconst BABEL_CONFIG_FILENAMES = [\n '.babelrc',\n '.babelrc.json',\n 'babel.config.js',\n 'babel.config.cjs',\n 'babel.config.mjs',\n 'babel.config.ts',\n 'babel.config.cts',\n];\n\nconst MODULE_RESOLVER_NAMES = new Set([\n 'module-resolver',\n 'babel-plugin-module-resolver',\n '@babel/plugin-module-resolver',\n]);\n\nconst loadNearestBabelConfig = (startDir: string, rootDir: string): BabelAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = babelConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const name of BABEL_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, name);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n let aliases: Record<string, string> = {};\n const roots: string[] = [];\n const extensions: string[] = [];\n if (filePath.endsWith('.json') || path.basename(filePath) === '.babelrc') {\n try {\n const json = JSON.parse(raw) as { plugins?: unknown };\n const plugins = (json.plugins as unknown[]) || [];\n for (const pluginEntry of plugins) {\n if (Array.isArray(pluginEntry)) {\n const [pluginNameRaw, pluginOptionsRaw] = pluginEntry as [unknown, unknown];\n if (typeof pluginNameRaw === 'string' && MODULE_RESOLVER_NAMES.has(pluginNameRaw)) {\n const opts: ModuleResolverOptions =\n (pluginOptionsRaw as ModuleResolverOptions) || {};\n if (opts.alias && typeof opts.alias === 'object') {\n aliases = { ...aliases, ...opts.alias };\n }\n const rootArr = Array.isArray(opts.root) ? opts.root : [];\n for (const rootEntry of rootArr) {\n if (typeof rootEntry === 'string') {\n roots.push(rootEntry);\n }\n }\n const extArr = Array.isArray(opts.extensions) ? opts.extensions : [];\n for (const extEntry of extArr) {\n if (typeof extEntry === 'string') {\n extensions.push(extEntry);\n }\n }\n }\n }\n }\n } catch {\n // ignore JSON parse\n }\n }\n const cfg: BabelAliasConfig = {\n configDir: path.dirname(filePath),\n aliases,\n roots,\n extensions,\n };\n babelConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n babelConfigLookupCache.set(cur, null);\n return null;\n }\n }\n babelConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyBabelMappings = (spec: string, cfg: BabelAliasConfig): string | undefined => {\n const keys = Object.keys(cfg.aliases);\n let best: string | undefined;\n for (const key of keys) {\n if (matchPathKey(spec, key)) {\n if (!best || key.length > best.length) {\n best = key;\n }\n }\n }\n if (!best) {\n return undefined;\n }\n const replaced = replacePathKey(spec, best);\n const targetTmpl = cfg.aliases[best] ?? '';\n const targetPath = targetTmpl.includes('*') ? targetTmpl.replace('*', replaced) : targetTmpl;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n if (!targetTmpl.includes('*') && replaced) {\n const joined = path.join(abs, replaced);\n const r2 = tryResolveFile(joined);\n if (r2) {\n return r2;\n }\n }\n for (const rootBase of cfg.roots) {\n const base = path.isAbsolute(rootBase) ? rootBase : path.resolve(cfg.configDir, rootBase);\n const r3 = tryResolveFile(path.join(base, spec));\n if (r3) {\n return r3;\n }\n }\n return undefined;\n};\n\nconst METRO_CONFIG_FILENAMES = ['metro.config.js', 'metro.config.cjs', 'metro.config.mjs'];\n\nconst loadNearestMetroConfig = (startDir: string, rootDir: string): MetroAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = metroConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of METRO_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const varMap = new Map<string, string>();\n varMap.set('__dirname', path.dirname(filePath));\n const projectRootMatch = raw.match(/const\\s+projectRoot\\s*=\\s*__dirname\\s*;/);\n if (projectRootMatch) {\n varMap.set('projectRoot', path.dirname(filePath));\n }\n const workspaceRootMatch = raw.match(\n /const\\s+workspaceRoot\\s*=\\s*path\\.resolve\\(\\s*projectRoot\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (workspaceRootMatch) {\n const [, rel = ''] = workspaceRootMatch;\n const base = varMap.get('projectRoot') ?? path.dirname(filePath);\n if (rel) {\n varMap.set('workspaceRoot', path.resolve(base, rel));\n }\n }\n const extraMatch = raw.match(/extraNodeModules\\s*=\\s*\\{([\\s\\S]*?)\\}/m);\n const aliases: Record<string, string> = {};\n if (extraMatch) {\n const body = extraMatch[1] ?? '';\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*([^,]+),?/g;\n let pairMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((pairMatch = pairRe.exec(body))) {\n const [, aliasKeyRaw, rhsRaw] = pairMatch as unknown as [string, string, string];\n const aliasKey = aliasKeyRaw ?? '';\n const rhs = (rhsRaw ?? '').trim();\n let resolved: string | undefined;\n const strMatch = rhs.match(/^[\"']([^\"']+)[\"']$/);\n if (strMatch && strMatch[1]) {\n const strVal = strMatch[1] as string;\n resolved = path.isAbsolute(strVal)\n ? strVal\n : path.resolve(path.dirname(filePath), strVal);\n } else {\n const resMatch = rhs.match(\n /path\\.resolve\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (resMatch && resMatch[1] && resMatch[2]) {\n const varName = resMatch[1] as string;\n const segment = resMatch[2] as string;\n const base = varMap.get(varName) ?? path.dirname(filePath);\n resolved = path.resolve(base, segment);\n }\n }\n if (aliasKey && resolved) {\n aliases[aliasKey] = resolved;\n }\n }\n }\n const cfg: MetroAliasConfig = { configDir: path.dirname(filePath), aliases };\n metroConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n metroConfigLookupCache.set(cur, null);\n return null;\n }\n }\n metroConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyMetroMappings = (spec: string, cfg: MetroAliasConfig): string | undefined => {\n const entries = Object.entries(cfg.aliases);\n let bestKey: string | undefined;\n for (const [alias] of entries) {\n if (spec === alias || spec.startsWith(`${alias}/`)) {\n if (!bestKey || alias.length > bestKey.length) {\n bestKey = alias;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const sureKey = bestKey as string;\n const base = cfg.aliases[sureKey] ?? '';\n if (!base) {\n return undefined;\n }\n const remainder = spec === sureKey ? '' : spec.slice(sureKey.length + 1);\n const candidate = remainder ? path.join(base, remainder) : base;\n const res = tryResolveFile(candidate);\n return res;\n};\n\nconst loadNearestTsOrJsConfig = (startDir: string, rootDir: string): TsLikePathsConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = tsConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n const tsPath = path.join(cur, 'tsconfig.json');\n const jsPath = path.join(cur, 'jsconfig.json');\n if (fsSync.existsSync(tsPath) || fsSync.existsSync(jsPath)) {\n const filePath = fsSync.existsSync(tsPath) ? tsPath : jsPath;\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const json = JSON.parse(raw) as unknown;\n const compilerOptionsRaw = (json as { compilerOptions?: unknown }).compilerOptions ?? {};\n const { baseUrl: baseUrlRaw, paths } = compilerOptionsRaw as {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n const baseUrl = baseUrlRaw ? path.resolve(cur, baseUrlRaw) : undefined;\n const cfg: TsLikePathsConfig = {\n configDir: cur,\n ...(baseUrl ? { baseUrl } : {}),\n ...(paths ? { paths } : {}),\n };\n tsConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n tsConfigLookupCache.set(cur, null);\n return null;\n }\n }\n tsConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyPathsMapping = (spec: string, cfg: TsLikePathsConfig): string | undefined => {\n const map = cfg.paths;\n if (!map) {\n return undefined;\n }\n let bestKey: string | undefined;\n for (const key of Object.keys(map)) {\n if (matchPathKey(spec, key)) {\n if (!bestKey || key.length > bestKey.length) {\n bestKey = key;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const targets = map[bestKey] ?? [];\n const replaced = replacePathKey(spec, bestKey);\n for (const target of targets) {\n const targetPath = target.includes('*') ? target.replace('*', replaced) : target;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n }\n return undefined;\n};\n\nfunction matchPathKey(spec: string, key: string): boolean {\n if (key === spec) {\n return true;\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return false;\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.startsWith(prefix) && spec.endsWith(suffix);\n}\n\nfunction replacePathKey(spec: string, key: string): string {\n if (key === spec) {\n return '';\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return '';\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.slice(prefix.length, spec.length - suffix.length);\n}\n\nfunction resolveWithAliases(fromFile: string, spec: string, rootDir: string): string | undefined {\n const startDir = path.dirname(fromFile);\n let cur: string | undefined = startDir;\n while (cur && cur.startsWith(rootDir)) {\n const tsCfg = loadNearestTsOrJsConfig(cur, rootDir);\n if (tsCfg) {\n const viaPaths = applyPathsMapping(spec, tsCfg);\n if (viaPaths) {\n return viaPaths;\n }\n if (tsCfg.baseUrl) {\n const viaBase = tryResolveFile(path.join(tsCfg.baseUrl, spec));\n if (viaBase) {\n return viaBase;\n }\n }\n }\n const babelCfg = loadNearestBabelConfig(cur, rootDir);\n if (babelCfg) {\n const viaBabel = applyBabelMappings(spec, babelCfg);\n if (viaBabel) {\n return viaBabel;\n }\n }\n const jestCfg = loadNearestJestConfig(cur, rootDir);\n if (jestCfg) {\n const viaJest = applyJestMappings(spec, jestCfg);\n if (viaJest) {\n return viaJest;\n }\n }\n const metroCfg = loadNearestMetroConfig(cur, rootDir);\n if (metroCfg) {\n const viaMetro = applyMetroMappings(spec, metroCfg);\n if (viaMetro) {\n return viaMetro;\n }\n }\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return undefined;\n}\n\nexport const resolveImportWithRoot = (\n fromFile: string,\n spec: string,\n rootDir: string,\n cache: Map<string, string | undefined>,\n): string | undefined => {\n const key = `${fromFile}|${spec}`;\n const cached = cache.get(key);\n if (cached !== undefined) {\n return cached;\n }\n let resolved: string | undefined;\n const baseDir = path.dirname(fromFile);\n const isProjectAbs = spec.startsWith('/');\n const candidateBase = isProjectAbs\n ? path.join(rootDir, spec.slice(ONE))\n : path.resolve(baseDir, spec);\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n if (!resolved) {\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n }\n if (!resolved && !spec.startsWith('.') && !spec.startsWith('/')) {\n resolved = resolveWithAliases(fromFile, spec, rootDir);\n }\n cache.set(key, resolved);\n return resolved;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as fs from 'node:fs/promises';\nimport { createRequire } from 'node:module';\n\nimport { relativizeForMatch } from './paths';\n\nconst require = createRequire(import.meta.url);\n\nconst { createCoverageMap } =\n // eslint-disable-next-line import/no-extraneous-dependencies\n require('istanbul-lib-coverage') as typeof import('istanbul-lib-coverage');\n\nexport const readCoverageJson = async (jsonPath: string) => {\n try {\n const txt = await fs.readFile(jsonPath, 'utf8');\n if (txt.trim().length === 0) {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n const raw = JSON.parse(txt) as unknown;\n return (raw ?? {}) as import('istanbul-lib-coverage').CoverageMapData;\n } catch {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n};\n\nexport const filterCoverageMap = (\n map: import('istanbul-lib-coverage').CoverageMap,\n opts: {\n readonly includes: readonly string[];\n readonly excludes: readonly string[];\n readonly root: string;\n readonly selectionSpecified: boolean;\n },\n) => {\n // local picomatch import to avoid circulars\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const picomatchFn = require('picomatch') as unknown as (\n globs: string | readonly string[],\n options?: { readonly nocase?: boolean; readonly dot?: boolean },\n ) => (str: string) => boolean;\n const makeMatcher = (globs: readonly string[]) =>\n globs.length === 0 ? () => true : picomatchFn(globs as string[], { dot: true, nocase: true });\n\n const includeMatch = makeMatcher(opts.includes.length ? opts.includes : ['**/*']);\n const excludeMatch = makeMatcher(opts.excludes);\n const out = createCoverageMap({});\n\n for (const absFile of map.files()) {\n const rel = relativizeForMatch(absFile, opts.root);\n const summary = map.fileCoverageFor(absFile).toSummary();\n\n const executed =\n summary.statements.covered > 0 ||\n summary.functions.covered > 0 ||\n summary.branches.covered > 0 ||\n summary.lines.covered > 0;\n\n if (executed) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n } else {\n const inc = includeMatch(rel);\n let exc = excludeMatch(rel);\n if (opts.selectionSpecified) {\n exc = /\\b(node_modules|coverage|dist|build)\\b/.test(rel) && exc;\n }\n if (inc && !exc) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n }\n }\n }\n return out;\n};\n\nexport const computeUncoveredBlocks = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly start: number; readonly end: number }> => {\n const stmtHitsById = file.data.s as Record<string, number>;\n const sm = file.data.statementMap as Record<\n string,\n { start: { line: number }; end: { line: number } }\n >;\n const missed = new Set<number>();\n for (const statementId of Object.keys(stmtHitsById)) {\n if ((stmtHitsById[statementId] ?? 0) > 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const loc = sm[statementId];\n const from = Math.max(1, loc?.start.line ?? 0);\n const to = Math.max(from, loc?.end.line ?? 0);\n for (let ln = from; ln <= to; ln += 1) {\n missed.add(ln);\n }\n }\n const lines = Array.from(missed).sort((leftLine, rightLine) => leftLine - rightLine);\n const ranges: { start: number; end: number }[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const start = lines[index]!;\n let end = start;\n while (index + 1 < lines.length && lines[index + 1] === end + 1) {\n index += 1;\n end = lines[index]!;\n }\n ranges.push({ start, end });\n }\n return ranges;\n};\n\nexport const missedBranches = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{\n readonly id: string;\n readonly line: number;\n readonly zeroPaths: readonly number[];\n}> => {\n const branchHitsById = file.data.b as Record<string, number[]>;\n const branchMap = file.data.branchMap as Record<string, { line: number }>;\n const out: { id: string; line: number; zeroPaths: number[] }[] = [];\n for (const id of Object.keys(branchHitsById)) {\n const hitsArray = branchHitsById[id] ?? [];\n const zeros: number[] = [];\n hitsArray.forEach((hits, index) => {\n if (hits === 0) {\n zeros.push(index);\n }\n });\n if (zeros.length) {\n out.push({ id, line: branchMap[id]?.line ?? 0, zeroPaths: zeros });\n }\n }\n return out.sort((firstBranch, secondBranch) => firstBranch.line - secondBranch.line);\n};\n\nexport const missedFunctions = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly name: string; readonly line: number }> => {\n const functionHitCounts = file.data.f as Record<string, number>;\n const functionMap = file.data.fnMap as Record<string, { name: string; line: number }>;\n const out: { name: string; line: number }[] = [];\n for (const id of Object.keys(functionHitCounts)) {\n if ((functionHitCounts[id] ?? 0) === 0) {\n const meta = functionMap[id];\n out.push({ name: meta?.name ?? '(anonymous)', line: meta?.line ?? 0 });\n }\n }\n return out.sort((firstFunction, secondFunction) => firstFunction.line - secondFunction.line);\n};\n\nconst clamp = (value: number, lowerBound: number, upperBound: number) =>\n Math.max(lowerBound, Math.min(upperBound, value));\n\nexport const renderCodeFrame = (\n source: string,\n miss: { readonly start: number; readonly end: number },\n context = 3,\n): string => {\n const lines = source.split(/\\r?\\n/);\n const from = clamp(miss.start - context, 1, lines.length);\n const to = clamp(miss.end + context, 1, lines.length);\n const out: string[] = [];\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? '';\n const tag =\n ln >= miss.start && ln <= miss.end\n ? `> ${ln.toString().padStart(4)}|`\n : ` ${ln.toString().padStart(4)}|`;\n out.push(`${tag} ${body}`);\n }\n return out.join('\\n');\n};\n\nexport const compositeBarPct = (\n summary: import('istanbul-lib-coverage').CoverageSummary,\n hotspots: ReadonlyArray<{ readonly start: number; readonly end: number }>,\n): number => {\n const base = Math.min(\n Number.isFinite(summary.lines.pct) ? (summary.lines.pct as number) : 0,\n Number.isFinite(summary.functions.pct) ? (summary.functions.pct as number) : 0,\n Number.isFinite(summary.branches.pct) ? (summary.branches.pct as number) : 0,\n );\n const totalLines = (summary.lines.total ?? 0) as number;\n let penalty = 0;\n if (totalLines > 0 && hotspots.length > 0) {\n const largestRange = Math.max(...hotspots.map((range) => range.end - range.start + 1));\n const concentration = largestRange / totalLines;\n penalty = Math.min(15, Math.round(concentration * 100 * 0.5));\n }\n return Math.max(0, Math.min(100, base - penalty));\n};\n", "import * as path from 'node:path';\n\nexport const toPosix = (p: string) => p.replace(/\\\\/g, '/');\n\nexport const relativizeForMatch = (filePath: string, root: string) => {\n const rel = path.relative(root, filePath);\n return toPosix(rel.startsWith('..') ? filePath : rel);\n};\n\nconst preferVsCode = (hint?: string): boolean =>\n /^(code|vscode)$/i.test(String(hint ?? process.env.COVERAGE_EDITOR)) ||\n process.env.TERM_PROGRAM === 'vscode' ||\n Boolean(process.env.VSCODE_IPC_HOOK);\n\nexport const preferredEditorHref = (absPath: string, line?: number, hint?: string) => {\n const absolute = path.resolve(absPath);\n return preferVsCode(hint)\n ? `vscode://file/${absolute}${typeof line === 'number' ? `:${line}` : ''}`\n : `file://${absolute}${typeof line === 'number' ? `#L${line}` : ''}`;\n};\n\nexport const linkifyPadded =\n (absPath: string, line?: number, hint?: string) => (padded: string) => {\n const trimmed = padded.replace(/\\s+$/u, '');\n const pad = padded.length - trimmed.length;\n return `\\u001B]8;;${preferredEditorHref(absPath, line, hint)}\\u0007${trimmed}\\u001B]8;;\\u0007${' '.repeat(pad)}`;\n };\n", "import * as path from \"node:path\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\nimport { ansi } from \"./ansi\";\nimport { tintPct } from \"./bars\";\nimport { barCell, ColumnSpec, Cell, cell, renderTable } from \"./table\";\nimport { preferredEditorHref, linkifyPadded } from \"./paths\";\nimport {\n compositeBarPct,\n computeUncoveredBlocks,\n missedBranches,\n missedFunctions,\n} from \"./coverage-core\";\n\nexport const printDetailedCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly limitPerFile: number | \"all\";\n readonly showCode: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const files = opts.map.files().sort((fileA, fileB) => {\n const summaryA = opts.map.fileCoverageFor(fileA).toSummary();\n const summaryB = opts.map.fileCoverageFor(fileB).toSummary();\n return summaryA.lines.pct - summaryB.lines.pct;\n });\n for (const abs of files) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const blocks = computeUncoveredBlocks(fc);\n const misses = missedBranches(fc);\n const missFns = missedFunctions(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const max =\n opts.limitPerFile === \"all\"\n ? Number.POSITIVE_INFINITY\n : opts.limitPerFile ?? 5;\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const topBlocks = blocks\n .slice()\n .sort(compareRangesByLengthDescThenStart)\n .slice(0, max);\n if (topBlocks.length === 0 && misses.length === 0 && missFns.length === 0) {\n console.info(ansi.dim(\" No uncovered hotspots.\"));\n console.info(\"\");\n // eslint-disable-next-line no-continue\n continue;\n }\n let src = \"\";\n if (opts.showCode && topBlocks.length > 0) {\n try {\n src = fsSync.readFileSync(abs, \"utf8\");\n } catch {\n src = \"\";\n }\n }\n for (const block of topBlocks) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n block.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${block.start}\\u001B]8;;\\u0007`;\n const label = ` ${ansi.yellow(`L${block.start}`)}\u2013${ansi.yellow(\n `L${block.end}`\n )} ${link}`;\n console.info(label);\n if (opts.showCode && src.length) {\n const lines = src.split(/\\r?\\n/);\n const from = Math.max(1, block.start - 3);\n const to = Math.min(lines.length, block.end + 3);\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? \"\";\n const tag =\n ln >= block.start && ln <= block.end\n ? ansi.red(`>${ln.toString().padStart(4)}|`)\n : ansi.dim(` ${ln.toString().padStart(4)}|`);\n console.info(`${tag} ${body}`);\n }\n }\n }\n if (missFns.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of missFns) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`;\n console.info(` - ${fn.name} @ ${link}`);\n }\n }\n if (misses.length) {\n console.info(ansi.bold(\" Branch paths with zero hits:\"));\n for (const br of misses) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`;\n console.info(\n ` - branch#${br.id} @ ${link} missed paths: [${br.zeroPaths.join(\n \", \"\n )}]`\n );\n }\n }\n console.info(\"\");\n }\n};\n\nexport const printCompactCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly maxFiles?: number;\n readonly maxHotspots?: number;\n readonly pageFit?: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const terminalRows =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const reservedRows = 8;\n const availableRows = Math.max(10, terminalRows - reservedRows);\n const maxHotspotsDerived = opts.pageFit\n ? Math.max(3, Math.floor(availableRows * 0.5))\n : opts.maxHotspots ?? 8;\n const maxFunctionsDerived = opts.pageFit\n ? Math.max(2, Math.floor(availableRows * 0.25))\n : 6;\n const maxBranchesDerived = opts.pageFit\n ? Math.max(2, availableRows - maxHotspotsDerived - maxFunctionsDerived)\n : 6;\n const files = opts.map\n .files()\n .sort(\n (fileA, fileB) =>\n opts.map.fileCoverageFor(fileA).toSummary().lines.pct -\n opts.map.fileCoverageFor(fileB).toSummary().lines.pct\n );\n const fileCap = opts.maxFiles ?? files.length;\n for (const abs of files.slice(0, fileCap)) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const blocks = computeUncoveredBlocks(fc)\n .slice()\n .sort(compareRangesByLengthDescThenStart);\n const missFns = missedFunctions(fc);\n const misses = missedBranches(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const hotspots = blocks.slice(0, maxHotspotsDerived);\n if (hotspots.length) {\n console.info(ansi.bold(\" Hotspots:\"));\n for (const hotspot of hotspots) {\n const len = hotspot.end - hotspot.start + 1;\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n hotspot.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${hotspot.start}\\u001B]8;;\\u0007`;\n console.info(\n ` - L${hotspot.start}\u2013L${hotspot.end} (${len} lines) ${link}`\n );\n }\n }\n const functionsList = missFns.slice(0, maxFunctionsDerived);\n if (functionsList.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of functionsList) {\n console.info(\n ` - ${fn.name} @ \\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const branchesList = misses.slice(0, maxBranchesDerived);\n if (branchesList.length) {\n console.info(ansi.bold(\" Branches with zero-hit paths:\"));\n for (const br of branchesList) {\n console.info(\n ` - L${br.line} branch#${br.id} missed: [${br.zeroPaths.join(\n \", \"\n )}] \\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const restHs = Math.max(0, blocks.length - hotspots.length);\n const restFns = Math.max(0, missFns.length - functionsList.length);\n const restBrs = Math.max(0, misses.length - branchesList.length);\n if (restHs + restFns + restBrs > 0) {\n console.info(\n ansi.dim(\n ` \u2026 truncated: +${restHs} hotspots, +${restFns} funcs, +${restBrs} branches`\n )\n );\n }\n console.info(\"\");\n }\n if (files.length > fileCap) {\n console.info(\n ansi.dim(\n `\u2026 ${\n files.length - fileCap\n } more files omitted (use --coverage.maxFiles or --coverage.mode=full)`\n )\n );\n }\n};\n\n// Shorten a relative path to fit within maxWidth using directory squeezing:\n// keep HEAD dirs, squeeze the MIDDLE as \"\u2026/\", keep TAIL dirs, and always\n// preserve the filename (trimming the stem token-aware as a last resort).\nconst shortenPathPreservingFilename = (\n relPath: string,\n maxWidth: number,\n opts?: {\n readonly keepHead?: number; // soft hint for starting head dirs (default 1)\n readonly keepTail?: number; // soft hint for starting tail dirs (default 1)\n readonly ellipsis?: \"\u2026\" | \"...\"; // default '\u2026'\n readonly minDirChars?: number; // minimum per-dir chars when trimmed (default 1)\n }\n): string => {\n const ellipsis = opts?.ellipsis ?? \"\u2026\";\n const START_HEAD = Math.max(0, opts?.keepHead ?? 1);\n const START_TAIL = Math.max(0, opts?.keepTail ?? 1);\n const MIN_DIR_CHARS = Math.max(1, opts?.minDirChars ?? 2);\n\n if (maxWidth <= 0) {\n return \"\";\n }\n\n const visibleWidth = (text: string): number => [...text].length;\n\n const splitMultiExt = (base: string) => {\n const endings = [\n \".test.ts\",\n \".spec.ts\",\n \".d.ts\",\n \".schema.ts\",\n \".schema.js\",\n \".config.ts\",\n \".config.js\",\n ] as const;\n for (const ending of endings) {\n if (base.endsWith(ending)) {\n return { stem: base.slice(0, -ending.length), ext: ending } as const;\n }\n }\n const ext = path.extname(base);\n return { stem: base.slice(0, -ext.length), ext } as const;\n };\n\n const sliceBalanced = (input: string, width: number): string => {\n if (visibleWidth(input) <= width) {\n return input;\n }\n if (width <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, width);\n }\n const keep = width - visibleWidth(ellipsis);\n const head = Math.ceil(keep / 2);\n const tail = Math.floor(keep / 2);\n return input.slice(0, head) + ellipsis + input.slice(-tail);\n };\n\n const tokenAwareMiddle = (stem: string, budget: number): string => {\n if (budget <= 0) {\n return \"\";\n }\n if (visibleWidth(stem) <= budget) {\n return stem;\n }\n if (budget <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, budget);\n }\n const tokens = stem.split(/([._-])/); // keep separators\n let leftIndex = 0;\n let rightIndex = tokens.length - 1;\n let left = \"\";\n let right = \"\";\n while (leftIndex <= rightIndex) {\n const tryL = left + tokens[leftIndex];\n const tryR = tokens[rightIndex] + right;\n const candL = tryL + ellipsis + right;\n const candR = left + ellipsis + tryR;\n const canL = visibleWidth(candL) <= budget;\n const canR = visibleWidth(candR) <= budget;\n if (canL && (!canR || visibleWidth(candL) >= visibleWidth(candR))) {\n left = tryL;\n leftIndex += 1;\n } else if (canR) {\n right = tryR;\n rightIndex -= 1;\n } else {\n break;\n }\n }\n const glued = left + ellipsis + right;\n if (visibleWidth(glued) < budget - 1) {\n return sliceBalanced(stem, budget);\n }\n return visibleWidth(glued) <= budget ? glued : sliceBalanced(stem, budget);\n };\n\n // Build a candidate label from split parts, collapsing duplicate ellipses\n // and removing any segments that are themselves just an ellipsis string.\n const joinParts = (\n headParts: readonly string[],\n tailParts: readonly string[],\n hideMiddle: boolean,\n baseLabel: string\n ): string => {\n const removeEllipsisSegments = (parts: readonly string[]) =>\n parts.filter((segment) => segment && segment !== ellipsis);\n const headCleaned = removeEllipsisSegments(headParts);\n const tailCleaned = removeEllipsisSegments(tailParts);\n\n const segmentsList: string[] = [];\n if (headCleaned.length) {\n segmentsList.push(headCleaned.join(\"/\"));\n }\n if (hideMiddle) {\n segmentsList.push(ellipsis);\n }\n if (tailCleaned.length) {\n segmentsList.push(tailCleaned.join(\"/\"));\n }\n segmentsList.push(baseLabel);\n\n const squashed: string[] = [];\n for (const segmentText of segmentsList) {\n const previous = squashed[squashed.length - 1];\n const isDuplicateEllipsis =\n segmentText === ellipsis && previous === ellipsis;\n if (!isDuplicateEllipsis) {\n squashed.push(segmentText);\n }\n }\n return squashed.join(\"/\");\n };\n\n // Trim shown directory names to make the candidate fit, token-aware\n const tryTrimDirsToFit = (\n headSrc: readonly string[],\n tailSrc: readonly string[],\n hideMiddle: boolean,\n baseLabel: string,\n max: number\n ): string | null => {\n const headParts = headSrc.map((segment) => segment);\n const tailParts = tailSrc.map((segment) => segment);\n let hidAny = false;\n\n const build = () => {\n const label = joinParts(\n headParts,\n tailParts,\n hideMiddle || hidAny,\n baseLabel\n );\n return { label, width: visibleWidth(label) };\n };\n\n let { label, width } = build();\n if (width <= max) {\n return label;\n }\n\n type Segment = {\n arr: string[];\n idx: number;\n original: string;\n budget: number;\n min: number;\n };\n const segments: Segment[] = [];\n headParts.forEach((part, index) =>\n segments.push({\n arr: headParts,\n idx: index,\n original: headSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n tailParts.forEach((part, index) =>\n segments.push({\n arr: tailParts,\n idx: index,\n original: tailSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n\n let guardCounter = 200;\n while (width > max && guardCounter-- > 0) {\n let best: Segment | undefined;\n let bestSlack = 0;\n for (const seg of segments) {\n const slack = seg.budget - seg.min;\n if (slack > bestSlack) {\n bestSlack = slack;\n best = seg;\n }\n }\n if (!best) {\n break;\n }\n\n const overflow = width - max;\n const reduceBy = Math.min(overflow, best.budget - best.min);\n const nextBudget = Math.max(best.min, best.budget - reduceBy);\n\n // If the segment would shrink below the minimum per-dir chars, hide it.\n if (nextBudget < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n const trimmed = tokenAwareMiddle(best.original, nextBudget);\n if (trimmed === ellipsis || visibleWidth(trimmed) < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n best.arr[best.idx] = trimmed;\n best.budget = visibleWidth(trimmed);\n }\n }\n\n ({ label, width } = build());\n if (width <= max) {\n return label;\n }\n }\n\n return null;\n };\n\n const normalized = relPath.replace(/\\\\/g, \"/\");\n if (visibleWidth(normalized) <= maxWidth) {\n return normalized;\n }\n\n const segs = normalized.split(\"/\");\n const baseName = segs.pop() ?? \"\";\n const { stem, ext } = splitMultiExt(baseName);\n const baseFull = stem + ext;\n\n if (visibleWidth(baseFull) > maxWidth) {\n const stemBudget = Math.max(1, maxWidth - visibleWidth(ext));\n return tokenAwareMiddle(stem, stemBudget) + ext;\n }\n\n if (segs.length === 0) {\n return baseFull;\n }\n\n const total = segs.length;\n let headCount = Math.min(START_HEAD, total);\n let tailCount = Math.min(START_TAIL, Math.max(0, total - headCount));\n if (tailCount === 0 && total > headCount) {\n tailCount = 1;\n }\n\n const buildRaw = (headNum: number, tailNum: number) => {\n const headRaw = segs.slice(0, headNum);\n const tailRaw = segs.slice(total - tailNum);\n const hideMiddle = headNum + tailNum < total;\n return { headRaw, tailRaw, hideMiddle } as const;\n };\n\n let { headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tailCount);\n let candidate = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (!candidate) {\n return baseFull;\n }\n\n while (headCount + tailCount < total) {\n let advanced = false;\n\n if (headCount + tailCount < total) {\n const tryTail = Math.min(tailCount + 1, total - headCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tryTail));\n const candTail = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candTail) {\n tailCount = tryTail;\n candidate = candTail;\n advanced = true;\n }\n }\n\n if (!advanced && headCount + tailCount < total) {\n const tryHead = Math.min(headCount + 1, total - tailCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(tryHead, tailCount));\n const candHead = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candHead) {\n headCount = tryHead;\n candidate = candHead;\n advanced = true;\n }\n }\n\n if (!advanced) {\n break;\n }\n }\n\n if (headCount + tailCount >= total) {\n const full = `${segs.join(\"/\")}/${baseFull}`;\n return visibleWidth(full) <= maxWidth ? full : candidate;\n }\n\n return candidate;\n};\n\nconst isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Extract import/require/export-from specs for one file using ripgrep with timeout.\nconst extractImportSpecs = async (\n absPath: string,\n cache: Map<string, readonly string[]>\n): Promise<readonly string[]> => {\n const cached = cache.get(absPath);\n if (cached) {\n return cached;\n }\n\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n \"import\\\\s+[^'\\\"\\n]*from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\",\n \"-e\",\n \"require\\\\(\\\\s*['\\\"]([^'\\\"]+)['\\\"]\\\\s*\\\\)\",\n \"-e\",\n \"export\\\\s+(?:\\\\*|\\\\{[^}]*\\\\})\\\\s*from\\\\s*['\\\"]([^'\\\"]+)['\\\"]\",\n absPath,\n ];\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n\n const out = raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .filter((spec) => spec.startsWith(\".\") || spec.startsWith(\"/\"));\n\n cache.set(absPath, out);\n return out;\n};\n\n// Build minimal import-graph distance map from a set of executed tests.\nconst buildDistanceMapFromTests = async (\n executedTestsAbs: readonly string[],\n rootDir: string\n): Promise<Map<string, number>> => {\n const dist = new Map<string, number>();\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const queue: Array<[string, number]> = [];\n const seen = new Set<string>();\n\n for (const testAbs of executedTestsAbs) {\n const testPathNormalized = path.resolve(testAbs).replace(/\\\\/g, \"/\");\n dist.set(testPathNormalized, 0);\n queue.push([testPathNormalized, 0]);\n }\n\n const MAX_DEPTH = 6;\n\n while (queue.length) {\n const nextItem = queue.shift();\n if (!nextItem) {\n break;\n }\n const [currentFile, currentDistance] = nextItem;\n const withinDepth = currentDistance < MAX_DEPTH;\n const notSeen = !seen.has(currentFile);\n const isRepoFile = !currentFile.includes(\"/node_modules/\");\n if (withinDepth && notSeen && isRepoFile) {\n seen.add(currentFile);\n // eslint-disable-next-line no-await-in-loop\n const specs = await extractImportSpecs(currentFile, specsCache);\n const nextDistance = currentDistance + 1;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n currentFile,\n spec,\n rootDir,\n resolutionCache\n );\n const usable = resolved && !resolved.includes(\"/node_modules/\");\n if (usable) {\n const existing = dist.get(resolved!);\n if (existing === undefined || nextDistance < existing) {\n dist.set(resolved!, nextDistance);\n queue.push([resolved!, nextDistance]);\n }\n }\n }\n }\n }\n\n return dist;\n};\n\nexport const renderPerFileCompositeTable = async (opts: {\n readonly absPath: string;\n readonly file: import(\"istanbul-lib-coverage\").FileCoverage;\n readonly root: string;\n readonly maxRows?: number;\n readonly maxHotspots?: number;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const rel = path.relative(opts.root, opts.absPath).replace(/\\\\/g, \"/\");\n const sum = opts.file.toSummary();\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const tableBudget = Math.max(\n 14,\n Math.min(opts.maxRows ?? rowsAvail - 1, rowsAvail + 8)\n );\n const rowBudget = Math.max(6, tableBudget - 6);\n const blocks = computeUncoveredBlocks(opts.file)\n .slice()\n .sort((firstRange, secondRange) => {\n const firstLength = firstRange.end - firstRange.start;\n const secondLength = secondRange.end - secondRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n });\n const missFns = missedFunctions(opts.file);\n const misses = missedBranches(opts.file);\n const total =\n typeof process.stdout.columns === \"number\" && process.stdout.columns > 20\n ? process.stdout.columns\n : 100;\n const fileMax = Math.max(32, Math.floor(total * 0.42));\n const detailMax = Math.max(20, Math.floor(total * 0.22));\n const barMax = Math.max(6, Math.floor(total * 0.06));\n const cols: readonly ColumnSpec[] = [\n { label: \"File\", min: 28, max: fileMax },\n { label: \"Section\", min: 8, max: 10 },\n { label: \"Where\", min: 10, max: 14 },\n { label: \"Lines%\", min: 6, max: 7, align: \"right\" },\n { label: \"Bar\", min: 6, max: barMax },\n { label: \"Funcs%\", min: 6, max: 7, align: \"right\" },\n { label: \"Branch%\", min: 7, max: 8, align: \"right\" },\n { label: \"Detail\", min: 18, max: detailMax },\n ];\n const rows: Cell[][] = [];\n const lPct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const fPct = Number.isFinite(sum.functions.pct) ? sum.functions.pct : 0;\n const bPct = Number.isFinite(sum.branches.pct) ? sum.branches.pct : 0;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(width);\n return linkifyPadded(opts.absPath, undefined, opts.editorCmd)(display);\n }),\n cell(\"Summary\", ansi.bold),\n cell(\"\u2014\"),\n cell(`${lPct.toFixed(1)}%`, tintPct(lPct)),\n cell(\"\".padEnd(10), barCell(compositeBarPct(sum, blocks))),\n cell(`${fPct.toFixed(1)}%`, tintPct(fPct)),\n cell(`${bPct.toFixed(1)}%`, tintPct(bPct)),\n cell(\"\"),\n ]);\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)\n )\n ),\n cell(\"Totals\", ansi.dim),\n cell(\"\u2014\", ansi.dim),\n cell(`${lPct.toFixed(1)}%`, ansi.dim),\n cell(\"\".padEnd(10), (padded) => ansi.dim(padded)),\n cell(`${fPct.toFixed(1)}%`, ansi.dim),\n cell(`${bPct.toFixed(1)}%`, ansi.dim),\n cell(\"\"),\n ]);\n if (blocks.length || missFns.length || misses.length) {\n const wantHs = Math.min(\n typeof opts.maxHotspots === \"number\"\n ? opts.maxHotspots\n : Math.ceil(rowBudget * 0.45),\n blocks.length\n );\n if (wantHs > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Hotspots\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(largest uncovered ranges)\", ansi.dim),\n ]);\n for (const hotspotRange of blocks.slice(0, wantHs)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n hotspotRange.start,\n opts.editorCmd\n )(display);\n }),\n cell(\"Hotspot\"),\n cell(`L${hotspotRange.start}\u2013L${hotspotRange.end}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(`${hotspotRange.end - hotspotRange.start + 1} lines`),\n ]);\n }\n }\n const wantFn = Math.min(Math.ceil(rowBudget * 0.25), missFns.length);\n if (wantFn > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Functions\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(never executed)\", ansi.dim),\n ]);\n for (const missedFunction of missFns.slice(0, wantFn)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedFunction.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Func\"),\n cell(`L${missedFunction.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(missedFunction.name),\n ]);\n }\n }\n const wantBr = Math.min(Math.ceil(rowBudget * 0.2), misses.length);\n if (wantBr > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Branches\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(paths with 0 hits)\", ansi.dim),\n ]);\n for (const missedBranch of misses.slice(0, wantBr)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedBranch.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Branch\"),\n cell(`L${missedBranch.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\n `#${missedBranch.id} missed [${missedBranch.zeroPaths.join(\", \")}]`\n ),\n ]);\n }\n }\n const target = rowBudget;\n if (rows.length < target) {\n const lineQueue: number[] = [];\n for (const hotspotRange of blocks) {\n for (let ln = hotspotRange.start; ln <= hotspotRange.end; ln += 1) {\n lineQueue.push(ln);\n }\n if (lineQueue.length > 5000) {\n break;\n }\n }\n while (rows.length < target && lineQueue.length) {\n const ln = lineQueue.shift()!;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(opts.absPath, ln, opts.editorCmd)(display);\n }),\n cell(\"Line\"),\n cell(`L${ln}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"uncovered\"),\n ]);\n }\n while (rows.length < target) {\n rows.push([\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n ]);\n }\n }\n }\n const table = renderTable(cols, rows);\n console.info(table);\n const sep = ansi.gray(\n \"\u2500\".repeat(\n Math.max(\n 20,\n typeof process.stdout.columns === \"number\"\n ? process.stdout.columns\n : 100\n )\n )\n );\n console.info(sep);\n};\n\nexport const printPerFileCompositeTables = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly pageFit?: boolean;\n readonly maxHotspots?: number;\n readonly selectionPaths?: readonly string[];\n readonly changedFiles?: readonly string[];\n readonly executedTests?: readonly string[];\n readonly editorCmd?: string;\n}): Promise<void> => {\n const selectionAbs = (opts.selectionPaths ?? []).map((selPath) =>\n path.resolve(selPath).replace(/\\\\/g, \"/\")\n );\n const changedAbs = (opts.changedFiles ?? []).map((chgPath) =>\n path.resolve(chgPath).replace(/\\\\/g, \"/\")\n );\n const tokenizeForSimilarity = (filePathForTokens: string) =>\n new Set(\n filePathForTokens\n .toLowerCase()\n .replace(/[^a-z0-9/_\\-.]/g, \" \")\n .split(/[/_.-]+/)\n .filter(Boolean)\n );\n const jaccard = (left: Set<string>, right: Set<string>) => {\n let intersectionCount = 0;\n for (const token of left) {\n if (right.has(token)) {\n intersectionCount += 1;\n }\n }\n const unionSize = left.size + right.size - intersectionCount || 1;\n return intersectionCount / unionSize;\n };\n const isSameDirOrChild = (firstAbs: string, secondAbs: string) => {\n const dirA = path.dirname(firstAbs).replace(/\\\\/g, \"/\");\n const dirB = path.dirname(secondAbs).replace(/\\\\/g, \"/\");\n return (\n dirA === dirB ||\n dirB.startsWith(`${dirA}/`) ||\n dirA.startsWith(`${dirB}/`)\n );\n };\n const selectionTokens = selectionAbs.map(tokenizeForSimilarity);\n const changedTokens = changedAbs.map(tokenizeForSimilarity);\n const executedTestsAbs = (opts.executedTests ?? [])\n .map((testPath) => path.resolve(testPath).replace(/\\\\/g, \"/\"))\n .filter((absPath) => absPath.length > 0);\n const testTokens = executedTestsAbs.map(tokenizeForSimilarity);\n const allMapFilesAbs = opts.map\n .files()\n .map((absPath) => path.resolve(absPath).replace(/\\\\/g, \"/\"));\n const uncoveredCandidates = allMapFilesAbs.filter((absPath) => {\n const sum = opts.map.fileCoverageFor(absPath).toSummary();\n return !(\n sum.lines.pct >= 100 &&\n sum.functions.pct >= 100 &&\n sum.branches.pct >= 100\n );\n });\n let candidates: string[];\n if (selectionAbs.length > 0 || executedTestsAbs.length > 0) {\n // When tests or production paths are explicitly selected, consider ALL covered files,\n // then we'll sort by relevancy to the executed tests/selection below.\n candidates = allMapFilesAbs.slice();\n } else {\n candidates = uncoveredCandidates;\n }\n // Always exclude test-like files from candidates\n candidates = candidates.filter((abs) => !isTestLikePath(abs));\n\n // Compute relevancy of each candidate file to executed tests using import graph distance.\n // Distance tiers: 0=selected file, 1=direct from test, 2+=transitive.\n const INF = 1e9;\n const distFromTests = executedTestsAbs.length\n ? await buildDistanceMapFromTests(executedTestsAbs, opts.root)\n : new Map<string, number>();\n const selectionSetAbs = new Set(selectionAbs);\n\n type Scored = {\n abs: string;\n rel: string;\n linesPct: number;\n group: number;\n score: number;\n distance: number;\n };\n const scored: Scored[] = await Promise.all(\n candidates.map(async (abs): Promise<Scored> => {\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const sum = opts.map.fileCoverageFor(abs).toSummary();\n const pct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const absNorm = path.resolve(abs).replace(/\\\\/g, \"/\");\n const selfTokens = tokenizeForSimilarity(absNorm);\n const selSim = Math.max(\n 0,\n ...selectionTokens.map((selectionTokenSet) =>\n jaccard(selfTokens, selectionTokenSet)\n )\n );\n const chgSim = Math.max(\n 0,\n ...changedTokens.map((changedTokenSet) =>\n jaccard(selfTokens, changedTokenSet)\n )\n );\n const tstSim = Math.max(\n 0,\n ...testTokens.map((tset) => jaccard(selfTokens, tset))\n );\n const nearSelection = selectionAbs.some((selectionPath) =>\n isSameDirOrChild(absNorm, selectionPath)\n );\n const nearChanged = changedAbs.some((changedPath) =>\n isSameDirOrChild(absNorm, changedPath)\n );\n const related = selSim > 0 || chgSim > 0 || nearSelection || nearChanged;\n\n // Use precomputed distance\n const distance = selectionSetAbs.has(absNorm)\n ? 0\n : distFromTests.get(absNorm) ?? INF;\n\n let group = 6;\n if (selectionSetAbs.has(absNorm)) {\n group = 0; // selected prod file\n } else if (distance === 1) {\n group = 1; // directly imported by tests\n } else if (distance >= 2 && distance <= 3) {\n group = 2; // nearby transitive\n } else if (distance < INF) {\n group = 3; // distant transitive\n } else if (related) {\n group = 4; // path-similar only\n } else if (pct > 0) {\n group = 5; // executed but not in graph\n } else {\n group = 6;\n }\n\n // similarity to selection/changed/tests, with slight demotion for config/\n const prefixPenalty = rel.startsWith(\"config/\") ? -100 : 0;\n const score =\n Math.round(selSim * 10) +\n Math.round(chgSim * 5) +\n Math.round(tstSim * 12) +\n prefixPenalty;\n return { abs: absNorm, rel, linesPct: pct, group, score, distance };\n })\n );\n let files = scored\n .sort(\n (left, right) =>\n left.group - right.group ||\n left.distance - right.distance ||\n right.score - left.score ||\n right.linesPct - left.linesPct ||\n left.rel.localeCompare(right.rel)\n )\n .map((scoredItem) => scoredItem.abs);\n // Move directly selected production files to the very top (if present)\n if (selectionAbs.length > 0) {\n const selectionSet = new Set(selectionAbs);\n const selectedHead = files.filter((filePath) => selectionSet.has(filePath));\n const nonSelected = files.filter((filePath) => !selectionSet.has(filePath));\n files = [...selectedHead, ...nonSelected];\n }\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const perFileRows = opts.pageFit\n ? Math.max(14, rowsAvail - 1)\n : rowsAvail + 8;\n for (const absolutePath of [...files].reverse()) {\n const fileCoverage = opts.map.fileCoverageFor(absolutePath);\n // Print least-relevant first, highest priority last (nearest the summary table)\n // and keep output order stable.\n // eslint-disable-next-line no-await-in-loop\n await renderPerFileCompositeTable({\n absPath: absolutePath,\n file: fileCoverage,\n root: opts.root,\n maxRows: perFileRows,\n ...(typeof opts.maxHotspots === \"number\"\n ? { maxHotspots: opts.maxHotspots }\n : {}),\n editorCmd: opts.editorCmd ?? \"\",\n });\n }\n};\n", "export const ansi = {\n bold: (text: string) => `\\u001b[1m${text}\\u001b[22m`,\n dim: (text: string) => `\\u001b[2m${text}\\u001b[22m`,\n black: (text: string) => `\\u001b[30m${text}\\u001b[39m`,\n red: (text: string) => `\\u001b[31m${text}\\u001b[39m`,\n yellow: (text: string) => `\\u001b[33m${text}\\u001b[39m`,\n green: (text: string) => `\\u001b[32m${text}\\u001b[39m`,\n magenta: (text: string) => `\\u001b[35m${text}\\u001b[39m`,\n gray: (text: string) => `\\u001b[90m${text}\\u001b[39m`,\n cyan: (text: string) => `\\u001b[36m${text}\\u001b[39m`,\n white: (text: string) => `\\u001b[97m${text}\\u001b[39m`,\n bgRed: (text: string) => `\\u001b[41m${text}\\u001b[49m`,\n bgGreen: (text: string) => `\\u001b[42m${text}\\u001b[49m`,\n bgMagenta: (text: string) => `\\u001b[45m${text}\\u001b[49m`,\n bgCyan: (text: string) => `\\u001b[46m${text}\\u001b[49m`,\n bgGray: (text: string) => `\\u001b[100m${text}\\u001b[49m`,\n} as const;\n\nexport const supportsUnicode = (): boolean => {\n const term = String(process.env.TERM ?? '').toLowerCase();\n const wtSession = process.env.WT_SESSION ?? '';\n return Boolean(wtSession) || (Boolean(term) && term !== 'dumb');\n};\n\nexport const osc8 = (text: string, url: string) => `\\u001B]8;;${url}\\u0007${text}\\u001B]8;;\\u0007`;\n", "export type Colorize = (text: string) => string;\n\nconst useColor = Boolean(\n process.stdout.isTTY && !(process.env as unknown as { NO_COLOR?: string }).NO_COLOR,\n);\nconst maybe =\n (fn: Colorize): Colorize =>\n (text) =>\n useColor ? fn(text) : text;\n\nexport const colorRgb = (red: number, green: number, blue: number): Colorize =>\n maybe((text) => `\\x1b[38;2;${red};${green};${blue}m${text}\\x1b[0m`);\n\nconst HEX_SHORT_LENGTH = 3;\nconst HEX_SLICE = {\n redStart: 0,\n redEnd: 2,\n greenStart: 2,\n greenEnd: 4,\n blueStart: 4,\n blueEnd: 6,\n} as const;\n\nconst parseHex = (hex: string): { red: number; green: number; blue: number } => {\n const normalized = hex.replace(/^#/, '').trim();\n const isShort = normalized.length === HEX_SHORT_LENGTH;\n const full = isShort\n ? normalized\n .split('')\n .map((char) => char + char)\n .join('')\n : normalized;\n const red = parseInt(full.slice(HEX_SLICE.redStart, HEX_SLICE.redEnd), 16);\n const green = parseInt(full.slice(HEX_SLICE.greenStart, HEX_SLICE.greenEnd), 16);\n const blue = parseInt(full.slice(HEX_SLICE.blueStart, HEX_SLICE.blueEnd), 16);\n return { red, green, blue };\n};\n\nexport const colorHex = (hex: string): Colorize => {\n const { red, green, blue } = parseHex(hex);\n return colorRgb(red, green, blue);\n};\n\nexport const Colors = {\n Success: colorHex('#22c55e'),\n Warn: colorHex('#eab308'),\n Failure: colorHex('#ff2323'),\n Run: colorHex('#3b82f6'),\n Skip: colorHex('#eab308'),\n Todo: colorHex('#38bdf8'),\n} as const;\n\nexport const backgroundRgb = (red: number, green: number, blue: number): Colorize =>\n maybe((text) => `\\x1b[48;2;${red};${green};${blue}m${text}\\x1b[0m`);\n\nexport const bgColorHex = (hex: string): Colorize => {\n const { red, green, blue } = parseHex(hex);\n return backgroundRgb(red, green, blue);\n};\n\nexport const BackgroundColors = {\n Success: bgColorHex('#22c55e'),\n Warn: bgColorHex('#eab308'),\n Failure: bgColorHex('#ff2323'),\n Run: bgColorHex('#3b82f6'),\n Skip: bgColorHex('#eab308'),\n Todo: bgColorHex('#38bdf8'),\n} as const;\n", "import { ansi, supportsUnicode } from './ansi';\nimport { Colors } from './colors';\n\nconst SUCCESS_THRESHOLD = 85;\nconst WARNING_THRESHOLD = 60;\nconst PERCENT_MAX = 100;\nconst DEFAULT_BAR_WIDTH = 14;\n\n// NOTE: keep local color helpers minimal in this module; shared palette lives in colors.ts\n\nexport const tintPct = (pct: number): ((s: string) => string) => {\n if (pct >= SUCCESS_THRESHOLD) {\n return Colors.Success;\n }\n if (pct >= WARNING_THRESHOLD) {\n return Colors.Warn;\n }\n return Colors.Failure;\n};\n\nexport const bar = (pct: number, width = DEFAULT_BAR_WIDTH): string => {\n const filled = Math.round((pct / PERCENT_MAX) * width);\n const solid = supportsUnicode() ? '\u2588' : '#';\n const empty = supportsUnicode() ? '\u2591' : '-';\n const good = tintPct(pct);\n const MIN_REMAINING = 0;\n return `${good(solid.repeat(filled))}${ansi.gray(\n empty.repeat(Math.max(MIN_REMAINING, width - filled)),\n )}`;\n};\n", "import { ansi } from './ansi';\nimport { bar } from './bars';\n\nexport type ColumnSpec = {\n readonly label: string;\n readonly min: number;\n readonly max: number;\n readonly align?: 'left' | 'right';\n};\nexport type Cell = { readonly raw: string; readonly decorate?: (s: string) => string };\n\nexport const cell = (raw: string, decorate?: (s: string) => string): Cell =>\n decorate ? { raw, decorate } : { raw };\n\nconst padVisible = (text: string, width: number, align: 'left' | 'right') => {\n if (text.length === width) {\n return text;\n }\n if (text.length < width) {\n return align === 'right'\n ? ' '.repeat(width - text.length) + text\n : text + ' '.repeat(width - text.length);\n }\n return text.slice(0, Math.max(0, width));\n};\n\nconst border = {\n v: '\u2502',\n h: '\u2500',\n tl: '\u250C',\n tr: '\u2510',\n bl: '\u2514',\n br: '\u2518',\n jt: '\u252C',\n jb: '\u2534',\n jc: '\u253C',\n} as const;\n\nexport const renderTable = (\n columns: readonly ColumnSpec[],\n rows: ReadonlyArray<readonly Cell[]>,\n) => {\n const total =\n typeof process.stdout.columns === 'number' ? Math.max(process.stdout.columns, 60) : 100;\n const mins = columns.map((columnSpec) => columnSpec.min);\n const maxs = columns.map((columnSpec) => columnSpec.max);\n const borders = columns.length + 1;\n const budget = Math.max(1, total - borders);\n\n let widths = mins.slice();\n const minSum = mins.reduce((accumulated, value) => accumulated + value, 0);\n const maxSum = maxs.reduce((accumulated, value) => accumulated + value, 0);\n\n if (minSum > budget) {\n const factor = budget / minSum;\n widths = mins.map((minForColumn) => Math.max(1, Math.floor(minForColumn * factor)));\n let leftover = budget - widths.reduce((accumulated, widthValue) => accumulated + widthValue, 0);\n for (let i = 0; leftover > 0 && i < widths.length; i += 1) {\n widths[i]! += 1;\n leftover -= 1;\n }\n } else {\n let remaining = Math.min(budget, maxSum) - minSum;\n for (let i = 0; i < widths.length && remaining > 0; i += 1) {\n const maximumWidthAtIndex = maxs[i] ?? 0;\n const currentWidthAtIndex = widths[i] ?? 0;\n const grow = Math.min(remaining, Math.max(0, maximumWidthAtIndex - currentWidthAtIndex));\n widths[i] = currentWidthAtIndex + grow;\n remaining -= grow;\n }\n }\n\n const hr = (left: string, mid: string, right: string) =>\n `${left}${widths.map((columnWidth) => '\u2500'.repeat(columnWidth)).join(mid)}${right}`;\n const hrTop = hr(border.tl, border.jt, border.tr);\n const hrSep = hr(border.jc, border.jc, border.jc);\n const hrBot = hr(border.bl, border.jb, border.br);\n\n const header = `${border.v}${columns\n .map((col, i) => ansi.bold(padVisible(col.label, widths[i]!, col.align ?? 'left')))\n .join(border.v)}${border.v}`;\n\n const lines = rows.map((row) => {\n const cells = row.map((cellObj, i) => {\n const txt = padVisible(cellObj.raw, widths[i]!, columns[i]!.align ?? 'left');\n return typeof cellObj.decorate === 'function' ? cellObj.decorate(txt) : txt;\n });\n return `${border.v}${cells.join(border.v)}${border.v}`;\n });\n\n return [hrTop, header, hrSep, ...lines, hrBot].join('\\n');\n};\n\nexport const barCell = (pct: number) => (padded: string) => bar(pct, padded.length);\n", "/* eslint-disable no-continue */\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as util from 'node:util';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport JSON5 from 'json5';\n\nimport { ansi, osc8 } from './ansi';\nimport { Colors, BackgroundColors } from './colors';\nimport { preferredEditorHref } from './paths';\nimport { collapseStacks, firstTestLocation, isStackLine, stripAnsiSimple } from './stacks';\n\n// near imports (fs already imported) \u2014 helper to find the last bridge JSON path\nconst extractBridgePath = (raw: string, cwd: string): string | null => {\n const matches = Array.from(\n raw.matchAll(/Test results written to:\\s+([^\\n\\r]+jest-bridge-[^\\s'\"]+\\.json)/g),\n );\n if (!matches.length) {\n return null;\n }\n const jsonPath = matches[matches.length - 1]![1]!.trim().replace(/^[\"'`]|[\"'`]$/g, '');\n return path.isAbsolute(jsonPath) ? jsonPath : path.resolve(cwd, jsonPath);\n};\n\n// Vitest-like formatter helpers\nexport const drawRule = (label?: string): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n if (!label) {\n return ansi.dim('\u2500'.repeat(width));\n }\n const plain = stripAnsiSimple(label);\n const pad = Math.max(1, width - plain.length - 1);\n return `${ansi.dim('\u2500'.repeat(pad))} ${label}`;\n};\n\ntype KnownEnv = NodeJS.ProcessEnv & {\n TEST_CLI_STACKS?: string;\n TEST_CLI_SUMMARY?: string;\n TEST_CLI_SHOW_CONSOLE?: string;\n NO_COLOR?: string;\n};\nconst env = process.env as unknown as KnownEnv;\n\nconst colorTokens = {\n pass: Colors.Success,\n fail: Colors.Failure,\n run: Colors.Run,\n skip: Colors.Skip,\n todo: Colors.Todo,\n passPill: (text: string) => BackgroundColors.Success(ansi.white(` ${text} `)),\n failPill: (text: string) => BackgroundColors.Failure(ansi.white(` ${text} `)),\n runPill: (text: string) => BackgroundColors.Run(ansi.white(` ${text} `)),\n};\n\nconst MAX_CONSOLE_ERRORS_TO_SHOW = 3;\n\n// Pretty diff helpers\nconst isArrayOfPrimitives = (value: unknown): value is Array<string | number | boolean | null> =>\n Array.isArray(value) &&\n value.every(\n (element) => ['string', 'number', 'boolean'].includes(typeof element) || element === null,\n );\n\ntype DiffPayload = { expected?: unknown; received?: unknown };\n\n// Normalize and indentation helpers for prettier-style rendering\nexport const indentBlock = (text: string, pad = ' '): string =>\n text\n .split('\\n')\n .map((line) => (line ? pad + line : pad.trimEnd()))\n .join('\\n');\n\nexport const prettifyPrettyFormatBlock = (raw: string): string => {\n const lines = raw.split('\\n');\n if (!lines.length) {\n return raw;\n }\n\n // Accept both pretty-format and already-normalized blocks\n const first = lines[0] ?? '';\n const isArrayStart = /^\\s*(?:Array\\s*\\[|\\[)\\s*$/.test(first);\n const isObjectStart = /^\\s*(?:Object\\s*\\{|\\{)\\s*$/.test(first);\n if (!isArrayStart && !isObjectStart) {\n return raw;\n }\n\n // Normalize the opener\n lines[0] = first\n .replace(/^(\\s*)Array\\s*\\[/, '$1[')\n .replace(/^(\\s*)Object\\s*\\{/, '$1{')\n .replace(/^\\s*\\[\\s*$/, '[')\n .replace(/^\\s*\\{\\s*$/, '{');\n\n const closingChar = isArrayStart ? ']' : '}';\n // Find the closing line\n let closeIdx = -1;\n for (let i = 1; i < lines.length; i += 1) {\n if (/^\\s*[\\]}]\\s*$/.test(lines[i]!)) {\n closeIdx = i;\n break;\n }\n }\n if (closeIdx < 0) {\n return lines.join('\\n');\n }\n\n const inner = lines.slice(1, closeIdx);\n\n // Compute the baseline indent across non-empty inner lines\n const indents: number[] = [];\n for (const lineText of inner) {\n if (lineText.trim().length === 0) {\n continue;\n }\n indents.push(lineText.match(/^\\s*/)?.[0]?.length ?? 0);\n }\n const minIndent = indents.length ? Math.min(...indents) : 0;\n\n // Re-indent so the *minimum* inner indent becomes exactly two spaces,\n // preserving relative nesting deeper than that.\n const reindented = inner.map((lineText, idx) => {\n if (lineText.trim().length === 0) {\n return lineText;\n } // keep blank lines blank\n const current = lineText.match(/^\\s*/)?.[0]?.length ?? 0;\n const rest = lineText.slice(current);\n const extra = Math.max(0, current - minIndent);\n const base = ' '; // Prettier-style 2-space base\n // Optionally remove trailing comma on the last inner item to be more Prettier-like\n const withoutDangling = idx === inner.length - 1 ? rest.replace(/,\\s*$/, '') : rest;\n return base + ' '.repeat(extra) + withoutDangling;\n });\n\n // Normalize the closer to be flush with the opener (no extra inner spaces)\n lines.splice(1, inner.length, ...reindented);\n lines[closeIdx] = closingChar;\n\n return lines.join('\\n');\n};\n\nconst normalizeBlock = (raw: string) =>\n raw\n .replace(/^\\s*Array\\s*\\[/, '[')\n .replace(/^\\s*Object\\s*\\{/, '{')\n // remove dangling commas just before ] or }\n .replace(/,(\\s*[\\]}])/g, '$1');\n\nexport const stringifyPrettierish = (value: unknown): string => {\n // strings coming from Jest diff\n if (typeof value === 'string') {\n const text = normalizeBlock(value.trim());\n if (/^[[{]/.test(text)) {\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n /* fall through */\n }\n }\n return value;\n }\n // real data: arrays/objects\n if (Array.isArray(value) || (value && typeof value === 'object')) {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n /* circulars etc \u2014 fall through */\n }\n }\n // everything else\n return util.inspect(value, { depth: 10, breakLength: Infinity, compact: false, sorted: true });\n};\n\nexport const drawFailRule = (label = ' FAIL '): string => drawRule(colorTokens.failPill(label));\n\n// NEW: plain red line rule (no label), matching Vitest section rules\nexport const drawFailLine = (): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n return colorTokens.fail('\u2500'.repeat(width));\n};\n\nexport const renderRunLine = (cwd: string): string =>\n `${colorTokens.runPill('RUN')} ${ansi.dim(cwd.replace(/\\\\/g, '/'))}`;\n\nexport const colorStackLine = (line: string, projectHint: RegExp): string => {\n const plainLine = stripAnsiSimple(line);\n if (!isStackLine(plainLine)) {\n return plainLine;\n }\n const match = plainLine.match(/\\(?([^\\s()]+):(\\d+):(\\d+)\\)?$/);\n if (!match) {\n return ansi.dim(plainLine);\n }\n const file = match[1]!.replace(/\\\\/g, '/');\n const lineNumber = match[2]!;\n const columnNumber = match[3]!;\n const coloredPath = projectHint.test(file) ? ansi.cyan(file) : ansi.dim(file);\n return plainLine.replace(\n match[0]!,\n `(${coloredPath}${ansi.dim(':')}${ansi.white(`${lineNumber}:${columnNumber}`)})`,\n );\n};\n\nexport const renderCodeFrame = (lines: readonly string[], start: number): string[] => {\n const out: string[] = [];\n for (let i = start; i < lines.length; i += 1) {\n const raw = stripAnsiSimple(lines[i]!);\n if (!raw.trim()) {\n break;\n }\n if (/^\\s*\\^+\\s*$/.test(raw)) {\n out.push(` ${colorTokens.fail(raw.trimEnd())}`);\n continue;\n }\n const pointerMatch = raw.match(/^\\s*>(\\s*\\d+)\\s*\\|\\s?(.*)$/);\n if (pointerMatch) {\n const num = ansi.dim(pointerMatch[1]!.trim());\n const code = ansi.yellow(pointerMatch[2] ?? '');\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n const normalMatch = raw.match(/^\\s*(\\d+)\\s*\\|\\s?(.*)$/);\n if (normalMatch) {\n const num = ansi.dim(normalMatch[1]!);\n const code = ansi.dim(normalMatch[2] ?? '');\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n out.push(` ${raw}`);\n }\n return out;\n};\n\n// NEW: read file lines cache + synthesized codeframe\nconst _sourceCache = new Map<string, string[]>();\nconst readSource = (file: string): string[] => {\n const normalizedFile = file.replace(/\\\\/g, '/');\n const cached = _sourceCache.get(normalizedFile);\n if (cached) {\n return cached;\n }\n try {\n const txt = fs.readFileSync(normalizedFile, 'utf8');\n const arr = txt.split(/\\r?\\n/);\n _sourceCache.set(normalizedFile, arr);\n return arr;\n } catch {\n return [];\n }\n};\n\nexport const renderSourceCodeFrame = (file: string, line: number, context = 3): string[] => {\n const lines = readSource(file);\n if (!lines.length || !Number.isFinite(line)) {\n return [];\n }\n const idx = Math.max(1, Math.min(line, lines.length));\n const start = Math.max(1, idx - context);\n const end = Math.min(lines.length, idx + context);\n\n const out: string[] = [];\n for (let currentLineNumber = start; currentLineNumber <= end; currentLineNumber += 1) {\n const num = ansi.dim(String(currentLineNumber));\n const code =\n currentLineNumber === idx\n ? ansi.yellow(lines[currentLineNumber - 1] ?? '')\n : ansi.dim(lines[currentLineNumber - 1] ?? '');\n if (currentLineNumber === idx) {\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n }\n }\n out.push(` ${colorTokens.fail('^')}`);\n return out;\n};\n\n// PATCH: deepest project frame (last match in the stack)\nconst findLastProjectFrameIndex = (lines: readonly string[], projectHint: RegExp): number => {\n for (let i = lines.length - 1; i >= 0; i -= 1) {\n const simple = stripAnsiSimple(lines[i]!);\n if (\n isStackLine(simple) &&\n projectHint.test(simple) &&\n !/node_modules|vitest|jest/.test(simple)\n ) {\n return i;\n }\n }\n return -1;\n};\n\n// NEW: short stack tail (last N frames), colored\nconst renderStackTail = (lines: readonly string[], projectHint: RegExp, max = 4): string[] => {\n const onlyStack = lines.filter((candidateLine) => isStackLine(stripAnsiSimple(candidateLine)));\n if (!onlyStack.length) {\n return [];\n }\n const tail = onlyStack.slice(-max);\n return tail.map((frameLine) => ` ${colorStackLine(frameLine, projectHint)}`);\n};\n\n// NEW: first N project frames from the stack (top-down)\nconst firstProjectFrames = (lines: readonly string[], projectHint: RegExp, max = 2): string[] => {\n const onlyStack = lines.filter((ln) => isStackLine(stripAnsiSimple(ln)));\n const projectOnly = onlyStack.filter((ln) => projectHint.test(stripAnsiSimple(ln)));\n return projectOnly.slice(0, max).map((ln) => ` ${colorStackLine(ln, projectHint)}`);\n};\n\n// NEW: extract assertion message (matcher hint + Expected/Received/diff)\nconst isTerminator = (lineText: string) => !lineText.trim() || isStackLine(lineText);\n\nexport const extractAssertionMessage = (msgLines: readonly string[]): string[] => {\n const lines = msgLines.map((rawLine: string) => stripAnsiSimple(rawLine));\n const out: string[] = [];\n\n const hintIdx = lines.findIndex(\n (candidateLine: string) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(candidateLine) ||\n /\\b(?:AssertionError|Error):/.test(candidateLine),\n );\n if (hintIdx >= 0) {\n out.push(lines[hintIdx]!);\n }\n\n const collectBlock = (start: number) => {\n out.push(lines[start]!);\n for (let i = start + 1; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n };\n\n const expectedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Expected:/.test(candidateLine),\n );\n const receivedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Received:/.test(candidateLine),\n );\n const diffIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*(?:- Expected|\\+ Received|Difference:)/.test(candidateLine),\n );\n\n if (expectedIdx >= 0) {\n collectBlock(expectedIdx);\n }\n if (receivedIdx >= 0) {\n collectBlock(receivedIdx);\n }\n if (diffIdx >= 0) {\n collectBlock(diffIdx);\n }\n\n // fallback: grab up to 4 non-stack lines after hint\n if (out.length === 0 && hintIdx >= 0) {\n for (let i = hintIdx + 1; i < lines.length && out.length < 4; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n }\n return out;\n};\n\n// PATCH: convert a single stack line to \"file:line\" (for editor link)\nconst stackLocation = (line: string): { file: string; line: number } | null => {\n const match = stripAnsiSimple(line).match(/\\(?([^\\s()]+):(\\d+):\\d+\\)?$/);\n return match ? { file: match[1]!.replace(/\\\\/g, '/'), line: Number(match[2]!) } : null;\n};\nexport const JEST_BRIDGE_REPORTER_SOURCE = `const fs = require('fs');\nconst path = require('path');\n\nclass BridgeReporter {\n constructor(globalConfig, options) {\n this.out = process.env.JEST_BRIDGE_OUT || (options && options.outFile) || path.join(process.cwd(), 'coverage', 'jest-run.json');\n this.buf = { startTime: Date.now(), testResults: [], aggregated: null };\n }\n onRunStart() { this.buf.startTime = Date.now(); }\n onTestResult(_test, tr) {\n const mapAssertion = (a) => ({\n title: a.title,\n fullName: a.fullName || [...(a.ancestorTitles || []), a.title].join(' '),\n status: a.status,\n duration: a.duration || 0,\n location: a.location || null,\n failureMessages: (a.failureMessages || []).map(String),\n });\n this.buf.testResults.push({\n testFilePath: tr.testFilePath,\n status: tr.numFailingTests ? 'failed' : 'passed',\n failureMessage: tr.failureMessage || '',\n failureDetails: tr.failureDetails || [],\n console: tr.console || null,\n perfStats: tr.perfStats || {},\n testResults: (tr.testResults || []).map(mapAssertion),\n });\n }\n onRunComplete(_contexts, agg) {\n this.buf.aggregated = {\n numTotalTestSuites: agg.numTotalTestSuites,\n numPassedTestSuites: agg.numPassedTestSuites,\n numFailedTestSuites: agg.numFailedTestSuites,\n numTotalTests: agg.numTotalTests,\n numPassedTests: agg.numPassedTests,\n numFailedTests: agg.numFailedTests,\n numPendingTests: agg.numPendingTests,\n numTodoTests: agg.numTodoTests,\n startTime: agg.startTime,\n success: agg.success,\n runTimeMs: agg.testResults.reduce((t, r) => t + Math.max(0, (r.perfStats?.end || 0) - (r.perfStats?.start || 0)), 0),\n };\n fs.mkdirSync(path.dirname(this.out), { recursive: true });\n fs.writeFileSync(this.out, JSON.stringify(this.buf), 'utf8');\n }\n}\nmodule.exports = BridgeReporter;`;\n\ntype Dict = Record<string, unknown>;\n\nconst asDict = (value: unknown): Dict | null =>\n value && typeof value === 'object' ? (value as Dict) : null;\n\nconst get = (objectValue: Dict | null, key: string): unknown =>\n objectValue ? objectValue[key] : undefined;\n\nconst getStr = (objectValue: Dict | null, key: string): string | undefined => {\n const candidate = get(objectValue, key);\n return typeof candidate === 'string' ? candidate : undefined;\n};\n\nexport function linesFromDetails(details: readonly unknown[] | undefined): {\n stacks: string[];\n messages: string[];\n} {\n const stacks: string[] = [];\n const messages: string[] = [];\n if (!details) {\n return { stacks, messages };\n }\n\n const pushMaybe = (value: unknown, bucket: string[]) => {\n if (typeof value === 'string' && value.trim()) {\n bucket.push(...value.split(/\\r?\\n/));\n }\n };\n\n for (const detail of details) {\n if (typeof detail === 'string') {\n if (/\\s+at\\s.+\\(.+:\\d+:\\d+\\)/.test(detail)) {\n pushMaybe(detail, stacks);\n } else {\n pushMaybe(detail, messages);\n }\n continue;\n }\n const dict = asDict(detail);\n if (dict) {\n pushMaybe(getStr(dict, 'stack'), stacks);\n pushMaybe(getStr(dict, 'message'), messages);\n\n const err = asDict(get(dict, 'error'));\n pushMaybe(getStr(err, 'stack'), stacks);\n pushMaybe(getStr(err, 'message'), messages);\n\n const matcherResult = asDict(get(dict, 'matcherResult'));\n pushMaybe(getStr(matcherResult, 'stack'), stacks);\n pushMaybe(getStr(matcherResult, 'message'), messages);\n pushMaybe(getStr(matcherResult, 'expected'), messages);\n pushMaybe(getStr(matcherResult, 'received'), messages);\n }\n }\n return { stacks, messages };\n}\n\n// NEW: choose a label that matches the payload\nexport function labelForMessage(lines: readonly string[]): string {\n const joined = lines.join(' ');\n const matched =\n joined.match(/\\b(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/) ||\n joined.match(/\\bError\\b/);\n if (matched) {\n const typeName = (matched[1] as string | undefined) ?? 'Error';\n return `${typeName}:`;\n }\n return /expect\\(.+?\\)\\.(?:to|not\\.)/.test(joined) ? 'Assertion:' : 'Message:';\n}\n\n/** Try to pull rich expected/received from\n * failureDetails.matcherResult; else sniff from message lines */\nexport function extractExpectedReceived(\n details?: readonly unknown[],\n lines?: readonly string[],\n): DiffPayload {\n if (details) {\n for (const detail of details) {\n const dict = asDict(detail);\n const matcherResult = dict && asDict(get(dict, 'matcherResult'));\n if (matcherResult) {\n const expected = get(matcherResult, 'expected');\n const received = get(matcherResult, 'received');\n if (expected !== undefined || received !== undefined) {\n return { expected, received };\n }\n }\n }\n }\n if (lines && lines.length) {\n const expectedLines: string[] = [];\n const receivedLines: string[] = [];\n let mode: 'none' | 'exp' | 'rec' = 'none';\n for (const rawLine of lines) {\n const simple = stripAnsiSimple(rawLine);\n if (/^\\s*Expected:/.test(simple)) {\n mode = 'exp';\n expectedLines.push(simple.replace(/^\\s*Expected:\\s*/, ''));\n continue;\n }\n if (/^\\s*Received:/.test(simple)) {\n mode = 'rec';\n receivedLines.push(simple.replace(/^\\s*Received:\\s*/, ''));\n continue;\n }\n if (/^\\s*[-+]\\s/.test(simple)) {\n continue;\n }\n if (!simple.trim()) {\n mode = 'none';\n } else if (mode === 'exp') {\n expectedLines.push(simple);\n } else if (mode === 'rec') {\n receivedLines.push(simple);\n }\n }\n if (expectedLines.length || receivedLines.length) {\n return { expected: expectedLines.join('\\n'), received: receivedLines.join('\\n') };\n }\n const unified = extractFromUnifiedDiff(lines);\n if (unified.expected !== undefined || unified.received !== undefined) {\n return unified;\n }\n }\n return {};\n}\n\nexport function extractFromUnifiedDiff(rawLines: readonly string[]): {\n expected?: string;\n received?: string;\n} {\n const lines = rawLines.map((lineText) => stripAnsiSimple(lineText));\n\n // Find the first pretty-format block start, signed or unsigned\n let startIndex = -1;\n for (let i = 0; i < lines.length; i += 1) {\n const lt = lines[i]!;\n if (/^\\s*(?:[-+]\\s*)?(Array\\s*\\[|Object\\s*\\{)/.test(lt)) {\n startIndex = i;\n break;\n }\n }\n if (startIndex < 0) {\n return {};\n }\n\n const expectedParts: string[] = [];\n const receivedParts: string[] = [];\n\n let opened = false;\n let expDone = false;\n let recDone = false;\n const canParseJsonish = (input: string): boolean => {\n const text = normalizeBlock(input).trim();\n try {\n JSON5.parse(text);\n return true;\n } catch {\n return false;\n }\n };\n\n for (let i = startIndex; i < lines.length; i += 1) {\n const lineText = lines[i]!;\n const unsigned = lineText.replace(/^\\s*[-+]\\s?/, '');\n const isMinus = /^\\s*-\\s/.test(lineText);\n const isPlus = /^\\s*\\+\\s/.test(lineText);\n\n if (!opened) {\n const looksLikeStart = /^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(unsigned);\n if (!looksLikeStart) {\n // Skip unrelated lines before the pretty block\n continue;\n }\n opened = true;\n }\n\n if (isMinus) {\n expectedParts.push(unsigned);\n } else if (isPlus) {\n receivedParts.push(unsigned);\n } else {\n expectedParts.push(unsigned);\n receivedParts.push(unsigned);\n }\n\n if (!expDone && expectedParts.length > 0) {\n const expJoined = expectedParts.join('\\n');\n expDone = canParseJsonish(expJoined);\n }\n if (!recDone && receivedParts.length > 0) {\n const recJoined = receivedParts.join('\\n');\n recDone = canParseJsonish(recJoined);\n }\n if (opened && expDone && recDone) {\n break;\n }\n }\n\n const toJsonLikeString = (joined: string | undefined): string | undefined => {\n if (!joined) {\n return undefined;\n }\n const text = normalizeBlock(joined).trim();\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return text;\n }\n };\n\n const expected = expectedParts.length ? expectedParts.join('\\n') : undefined;\n const received = receivedParts.length ? receivedParts.join('\\n') : undefined;\n const result: { expected?: string; received?: string } = {};\n const expStr = toJsonLikeString(expected);\n const recStr = toJsonLikeString(received);\n if (expStr !== undefined) {\n result.expected = expStr;\n }\n if (recStr !== undefined) {\n result.received = recStr;\n }\n return result;\n}\n\nfunction renderPrettyDiff(payload: DiffPayload): string[] {\n const out: string[] = [];\n const { expected, received } = payload;\n if (expected === undefined && received === undefined) {\n return out;\n }\n\n const expectedString = stringifyPrettierish(expected);\n const receivedString = stringifyPrettierish(received);\n\n out.push(\n ` ${ansi.bold('Expected')} ${ansi.dim(\n expected && Array.isArray(expected) ? `(len ${(expected as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.pass(expectedString)));\n out.push(\n ` ${ansi.bold('Received')} ${ansi.dim(\n received && Array.isArray(received) ? `(len ${(received as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.fail(receivedString)));\n\n if (isArrayOfPrimitives(expected) && isArrayOfPrimitives(received)) {\n const expectedSet = new Set(expected.map((element) => String(element)));\n const receivedSet = new Set(received.map((element) => String(element)));\n const missing = [...expectedSet].filter((element) => !receivedSet.has(element));\n const unexpected = [...receivedSet].filter((element) => !expectedSet.has(element));\n const parts: string[] = [];\n if (missing.length) {\n parts.push(\n `${missing.length} missing: ${missing\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${missing.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (unexpected.length) {\n parts.push(\n `${unexpected.length} unexpected: ${unexpected\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${unexpected.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (parts.length) {\n out.push(` ${ansi.dim('Difference:')} ${colorTokens.fail(parts.join(ansi.dim(' | ')))}`);\n }\n }\n\n out.push('');\n return out;\n}\n\nfunction pickPrimaryMessage(\n candidateMessageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n): string[] {\n const extracted = extractAssertionMessage(candidateMessageLines);\n if (extracted.length) {\n return extracted;\n }\n const errorLine = details.messages.find((lineText) =>\n /\\b(?:Error|TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/.test(lineText),\n );\n if (errorLine) {\n return [errorLine];\n }\n const firstNonEmpty = details.messages.find((lineText) => lineText.trim().length);\n if (firstNonEmpty) {\n return [firstNonEmpty];\n }\n return [];\n}\n\nfunction colorUnifiedDiffLine(simple: string): string {\n if (/^\\s*-\\s/.test(simple)) {\n return colorTokens.fail(simple);\n }\n if (/^\\s*\\+\\s/.test(simple)) {\n return colorTokens.pass(simple);\n }\n return simple;\n}\n\nexport type Loc = { file: string; line: number };\n\nexport type BuildCtx = {\n readonly projectHint: RegExp;\n readonly editorCmd: string | undefined;\n readonly showStacks: boolean;\n};\n\nexport const findCodeFrameStart = (lines: readonly string[]): number =>\n lines.findIndex((line) => /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(line)));\n\nexport const deepestProjectLoc = (\n stackLines: readonly string[],\n projectHint: RegExp,\n): Loc | null => {\n const idx = findLastProjectFrameIndex(stackLines, projectHint);\n return idx >= 0 ? stackLocation(stackLines[idx]!) : null;\n};\n\nexport const buildCodeFrameSection = (\n messageLines: readonly string[],\n ctx: BuildCtx,\n synthLoc?: Loc | null,\n): string[] => {\n const lines: string[] = [];\n const start = findCodeFrameStart(messageLines);\n if (start >= 0) {\n lines.push(...renderCodeFrame(messageLines, start), '');\n return lines;\n }\n if (ctx.showStacks && synthLoc) {\n lines.push(...renderSourceCodeFrame(synthLoc.file, synthLoc.line), '');\n }\n return lines;\n};\n\nexport const buildPrettyDiffSection = (\n details?: readonly unknown[],\n messageLines?: readonly string[],\n): string[] => renderPrettyDiff(extractExpectedReceived(details, messageLines));\n\nexport const buildMessageSection = (\n messageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n ctx: BuildCtx,\n opts?: { suppressDiff?: boolean; stackPreview?: readonly string[] },\n): string[] => {\n const out: string[] = [];\n\n const primary = pickPrimaryMessage(messageLines, details);\n\n const filtered = opts?.suppressDiff\n ? primary.filter((raw) => {\n const simple = stripAnsiSimple(raw);\n return (\n !/^\\s*(Expected:|Received:|Difference:)\\b/.test(simple) &&\n !/^\\s*[-+]\\s/.test(simple) &&\n !/^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(simple)\n );\n })\n : primary;\n\n if (filtered.length) {\n const label = labelForMessage(filtered);\n out.push(` ${ansi.bold(label)}`);\n for (const lineText of filtered) {\n out.push(` ${ansi.yellow(colorUnifiedDiffLine(lineText))}`);\n }\n if (opts?.stackPreview && opts.stackPreview.length) {\n for (const frame of opts.stackPreview) {\n out.push(frame);\n }\n }\n out.push('');\n }\n return out;\n};\n\ntype ConsoleEntry = Readonly<{\n type?: unknown;\n message?: unknown;\n origin?: unknown;\n}>;\n\nfunction isConsoleEntry(candidate: unknown): candidate is ConsoleEntry {\n return typeof candidate === 'object' && candidate !== null;\n}\n\nexport const buildConsoleSection = (maybeConsole: unknown): string[] => {\n const out: string[] = [];\n if (!Array.isArray(maybeConsole)) {\n return out;\n }\n\n const entries = maybeConsole.filter(isConsoleEntry);\n\n const errorsOnly = entries.filter((entry) => {\n const val = entry?.type;\n return String(val ?? '').toLowerCase() === 'error';\n });\n const scored = errorsOnly\n .map((entry) => {\n const raw = entry?.message as unknown;\n const msg = Array.isArray(raw)\n ? raw.map(String).join(' ')\n : typeof raw === 'string'\n ? raw\n : String(raw ?? '');\n return { msg, score: msg.length };\n })\n .filter((item) => item.msg.trim().length > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, MAX_CONSOLE_ERRORS_TO_SHOW);\n if (scored.length) {\n out.push(ansi.dim(' Console errors:'));\n for (const item of scored) {\n out.push(` ${ansi.dim('\u2022')} ${item.msg}`);\n }\n out.push('');\n }\n return out;\n};\n\nexport const buildStackSection = (\n mergedForStack: readonly string[],\n ctx: BuildCtx,\n fallbackLoc?: Loc | null,\n): string[] => {\n const out: string[] = [];\n out.push(ansi.dim(' Stack:'));\n if (!ctx.showStacks) {\n out.push(` ${ansi.dim('(hidden by TEST_CLI_STACKS=)')}`, '');\n return out;\n }\n const tail = renderStackTail(mergedForStack, ctx.projectHint, 4);\n if (tail.length) {\n out.push(...tail);\n const loc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n if (loc) {\n const href = preferredEditorHref(loc.file, loc.line, ctx.editorCmd);\n out.push(` ${ansi.dim('at')} ${osc8(`${path.basename(loc.file)}:${loc.line}`, href)}`);\n }\n out.push('');\n return out;\n }\n if (fallbackLoc) {\n out.push(\n ` ${colorStackLine(`${fallbackLoc.file}:${fallbackLoc.line}:0`, ctx.projectHint)}`,\n '',\n );\n return out;\n }\n out.push(` ${ansi.dim('(no stack provided)')}`, '');\n return out;\n};\n\nexport const buildFileBadgeLine = (rel: string, failedCount: number): string =>\n failedCount > 0\n ? `${colorTokens.failPill('FAIL')} ${ansi.white(rel)}`\n : `${colorTokens.passPill('PASS')} ${ansi.white(rel)}`;\n\nexport const buildPerFileOverview = (\n rel: string,\n assertions: readonly { readonly fullName: string; readonly status: string }[],\n): string[] => {\n const out: string[] = [];\n out.push(`${ansi.magenta(rel)} ${ansi.dim(`(${assertions.length})`)}`);\n for (const assertion of assertions) {\n const name = assertion.fullName;\n if (assertion.status === 'passed') {\n out.push(` ${colorTokens.pass('\u2713')} ${ansi.dim(name)}`);\n } else if (assertion.status === 'todo') {\n out.push(` ${colorTokens.todo('\u2610')} ${ansi.dim(name)} ${colorTokens.todo('[todo]')}`);\n } else if (assertion.status === 'pending') {\n out.push(` ${colorTokens.skip('\u2193')} ${ansi.dim(name)} ${colorTokens.skip('[skipped]')}`);\n } else {\n out.push(` ${colorTokens.fail('\u00D7')} ${ansi.white(name)}`);\n }\n }\n out.push('');\n return out;\n};\n\nexport const formatJestOutputVitest = (\n raw: string,\n opts?: { readonly cwd?: string; readonly editorCmd?: string },\n): string => {\n const showStacks = Boolean(env.TEST_CLI_STACKS);\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const lines = raw.split(/\\r?\\n/);\n const out: string[] = [];\n const seenFailures = new Set<string>();\n const seenFiles = new Set<string>();\n for (let lineIndex = 0; lineIndex < lines.length; ) {\n const ln = stripAnsiSimple(lines[lineIndex]!);\n if (/^\\s*\u25CF\\s+/.test(ln)) {\n const title = ln.replace(/^\\s*\u25CF\\s+/, '').trim();\n const block: string[] = [lines[lineIndex]!];\n let scanIndex = lineIndex + 1;\n while (scanIndex < lines.length) {\n const scanLine = stripAnsiSimple(lines[scanIndex]!);\n const nextIsStart =\n /^\\s*\u25CF\\s+/.test(scanLine) ||\n /^\\s*(PASS|FAIL)\\s/.test(scanLine) ||\n /^\\s*Test Suites:/.test(scanLine);\n if (nextIsStart && stripAnsiSimple(lines[scanIndex - 1] ?? '').trim() === '') {\n break;\n }\n block.push(lines[scanIndex]!);\n scanIndex += 1;\n }\n const codeFrameStart = block.findIndex((candidateLine) =>\n /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(candidateLine)),\n );\n const location = firstTestLocation(block, projectHint);\n const rel = location\n ? location.split(':')[0]!.replace(/\\\\/g, '/').replace(`${cwd}/`, '')\n : '';\n const key = `${rel}|${title}`;\n if (seenFailures.has(key)) {\n lineIndex = scanIndex;\n continue;\n }\n seenFailures.add(key);\n out.push(drawFailLine());\n const header = `${colorTokens.fail('\u00D7')} ${ansi.white(rel ? `${rel} > ${title}` : title)}`;\n out.push(header);\n // Reordered block: header already printed \u2192 codeframe \u2192 pretty diff \u2192 message \u2192 stack\n const linesBlock = block.map(String);\n const collapsedForSrc = collapseStacks(linesBlock.slice(0));\n // 1) Codeframe (embedded or synthesized)\n if (codeFrameStart >= 0) {\n out.push('');\n out.push(...renderCodeFrame(linesBlock, codeFrameStart));\n out.push('');\n } else if (showStacks) {\n const deepestIdxForSrc = findLastProjectFrameIndex(collapsedForSrc, projectHint);\n const locForSrc =\n deepestIdxForSrc >= 0 ? stackLocation(collapsedForSrc[deepestIdxForSrc]!) : null;\n if (locForSrc) {\n out.push('');\n out.push(...renderSourceCodeFrame(locForSrc.file, locForSrc.line));\n out.push('');\n }\n }\n // 2) Pretty Expected/Received\n const payload = extractExpectedReceived(undefined, linesBlock);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n // 3) Message with label + inline top project frames\n const detailsForMsg = linesFromDetails(undefined);\n const collapsedForTail = collapseStacks(linesBlock.slice(0));\n const stackPreview = showStacks ? firstProjectFrames(collapsedForTail, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(\n linesBlock,\n detailsForMsg,\n { projectHint, editorCmd: opts?.editorCmd, showStacks },\n { suppressDiff: hasPretty, stackPreview },\n ),\n );\n\n // 4) Stack tail last \u2014 only if we didn\u2019t inline a preview\n if (showStacks && stackPreview.length === 0) {\n const collapsed = collapseStacks(linesBlock.slice(0));\n out.push(\n ...buildStackSection(collapsed, {\n projectHint,\n editorCmd: opts?.editorCmd,\n showStacks,\n }),\n );\n }\n out.push(drawFailLine());\n out.push('');\n lineIndex = scanIndex;\n continue;\n }\n const passFail = ln.match(/^\\s*(PASS|FAIL)\\s+(.+)$/);\n if (passFail) {\n const badge = passFail[1]!;\n const fileAbs = passFail[2]!;\n const rel = fileAbs.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n if (seenFiles.has(rel)) {\n lineIndex += 1;\n continue;\n }\n seenFiles.add(rel);\n const pill = badge === 'PASS' ? colorTokens.passPill('PASS') : colorTokens.failPill('FAIL');\n out.push(`${pill} ${ansi.white(rel)}`);\n lineIndex += 1;\n continue;\n }\n if (/^\\s*(Test Suites:|Tests:|Snapshots:|Time:|Ran all)/.test(ln)) {\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n continue;\n }\n if (isStackLine(ln)) {\n if (showStacks) {\n const kept = collapseStacks([lines[lineIndex]!]);\n out.push(...kept);\n }\n lineIndex += 1;\n continue;\n }\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n }\n const rendered = out.join('\\n');\n // Detect if no test sections were parsed from the live stream and fall back to JSON rendering\n const hadParsedTests =\n seenFiles.size > 0 ||\n seenFailures.size > 0 ||\n out.some((lineText) => /^(?:\\s*)(PASS|FAIL)\\b/.test(stripAnsiSimple(lineText)));\n\n if (!hadParsedTests) {\n const bridgePath = extractBridgePath(raw, cwd);\n if (bridgePath && fs.existsSync(bridgePath)) {\n try {\n const json = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));\n const bridge = coerceJestJsonToBridge(json);\n const renderedFromJson = renderVitestFromJestJSON(bridge, opts);\n const prefix = out.join('\\n');\n return prefix ? `${prefix}\\n${renderedFromJson}` : renderedFromJson;\n } catch {\n // if JSON load fails, fall through to the minimal stream output\n }\n }\n }\n try {\n const preview = rendered.split('\\n').slice(0, 2).join('\\n');\n // eslint-disable-next-line no-console\n console.info(`formatJestOutputVitest: produced ${out.length} lines; preview:\\n${preview}`);\n } catch {\n /* no-op */\n }\n return rendered;\n};\n\nexport type BridgeJSON = {\n startTime: number;\n testResults: Array<{\n testFilePath: string;\n status: 'passed' | 'failed';\n failureMessage: string;\n failureDetails?: unknown[];\n console?: Array<{ message?: string; type?: string; origin?: string }> | null;\n testResults: Array<{\n fullName: string;\n status: string;\n duration: number;\n location: { line: number; column: number } | null;\n failureMessages: string[];\n }>;\n }>;\n aggregated: {\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n startTime: number;\n success: boolean;\n runTimeMs?: number;\n };\n};\n\ntype JestAssertionResult = {\n title: string;\n ancestorTitles: string[];\n status: string;\n location?: { line: number; column: number } | null;\n failureMessages?: string[];\n fullName?: string;\n duration?: number;\n};\n\ntype JestTestResultExtra = {\n readonly failureDetails?: unknown[];\n readonly console?: ReadonlyArray<{\n message?: unknown;\n type?: unknown;\n origin?: unknown;\n }> | null;\n readonly perfStats?: Readonly<Record<string, unknown>>;\n};\n\ntype JestTestResult = {\n testFilePath?: string;\n name?: string;\n status: 'passed' | 'failed';\n failureMessage?: string;\n assertionResults?: JestAssertionResult[];\n} & JestTestResultExtra;\n\ntype JestAggregatedResult = {\n startTime: number;\n success: boolean;\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n testResults: JestTestResult[];\n};\n\nconst isBridgeJSONLike = (candidate: unknown): candidate is BridgeJSON => {\n const candidateValue = candidate as Record<string, unknown> | null;\n return (\n typeof candidateValue === 'object' &&\n candidateValue !== null &&\n 'aggregated' in (candidateValue as Record<string, unknown>)\n );\n};\n\nexport function coerceJestJsonToBridge(raw: unknown): BridgeJSON {\n if (isBridgeJSONLike(raw)) {\n return raw as BridgeJSON;\n }\n const j = raw as JestAggregatedResult;\n if (!j || !Array.isArray(j.testResults)) {\n throw new Error('Unexpected Jest JSON shape');\n }\n return {\n startTime: Number(j.startTime ?? Date.now()),\n testResults: j.testResults.map((testFileResult) => ({\n testFilePath: testFileResult.testFilePath || testFileResult.name || '',\n status: testFileResult.status,\n failureMessage: testFileResult.failureMessage || '',\n failureDetails: testFileResult.failureDetails ?? [],\n testResults: (testFileResult.assertionResults || []).map((assertion) => ({\n title: assertion.title,\n fullName:\n assertion.fullName || [...(assertion.ancestorTitles || []), assertion.title].join(' '),\n status: assertion.status,\n duration: assertion.duration || 0,\n location: assertion.location ?? null,\n failureMessages: assertion.failureMessages || [],\n })),\n })),\n aggregated: {\n numTotalTestSuites: j.numTotalTestSuites,\n numPassedTestSuites: j.numPassedTestSuites,\n numFailedTestSuites: j.numFailedTestSuites,\n numTotalTests: j.numTotalTests,\n numPassedTests: j.numPassedTests,\n numFailedTests: j.numFailedTests,\n numPendingTests: j.numPendingTests,\n numTodoTests: j.numTodoTests,\n startTime: j.startTime,\n success: j.success,\n },\n };\n}\n\nconst vitestFooter = (\n agg: BridgeJSON['aggregated'],\n _startedAt?: number,\n durationMs?: number,\n): string => {\n const files = [\n agg.numFailedTestSuites ? colorTokens.fail(`${agg.numFailedTestSuites} failed`) : '',\n agg.numPassedTestSuites ? colorTokens.pass(`${agg.numPassedTestSuites} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const tests = [\n agg.numFailedTests ? colorTokens.fail(`${agg.numFailedTests} failed`) : '',\n agg.numPassedTests ? colorTokens.pass(`${agg.numPassedTests} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n agg.numTodoTests ? colorTokens.todo(`${agg.numTodoTests} todo`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const durMs =\n typeof durationMs === 'number'\n ? durationMs\n : typeof agg.runTimeMs === 'number'\n ? agg.runTimeMs\n : undefined;\n const time = durMs != null ? `${Math.max(0, Math.round(durMs))}ms` : '';\n const thread = ansi.dim('(in thread 0ms, 0.00%)');\n\n return [\n `${ansi.bold('Test Files')} ${files} ${ansi.dim(`(${agg.numTotalTestSuites})`)}`,\n `${ansi.bold('Tests')} ${tests} ${ansi.dim(`(${agg.numTotalTests})`)}`,\n `${ansi.bold('Time')} ${time} ${thread}`,\n ].join('\\n');\n};\n\nexport function renderVitestFromJestJSON(\n data: BridgeJSON,\n opts?: { cwd?: string; editorCmd?: string },\n): string {\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const ctx: BuildCtx = { projectHint, editorCmd: opts?.editorCmd, showStacks: true };\n const out: string[] = [];\n // Top RUN line\n out.push(renderRunLine(cwd));\n out.push('');\n for (const file of data.testResults) {\n const rel = file.testFilePath.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n const failed = file.testResults.filter((assertion) => assertion.status === 'failed');\n // Per-file overview list\n out.push(...buildPerFileOverview(rel, file.testResults));\n // File header block with PASS/FAIL badge\n out.push(buildFileBadgeLine(rel, failed.length));\n // Only render file-level failure when there are NO per-assertion failures\n if (file.failureMessage && failed.length === 0) {\n const lines = file.failureMessage.split(/\\r?\\n/);\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...lines, ...details.stacks]);\n const synthLoc = deepestProjectLoc(mergedForStack, projectHint);\n out.push(...buildCodeFrameSection(lines, ctx, synthLoc));\n\n const payload = extractExpectedReceived(file.failureDetails, lines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(lines, details, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n out.push(...buildConsoleSection(file.console ?? null));\n\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(...buildStackSection(mergedForStack, ctx));\n }\n }\n for (const failedAssertion of failed) {\n out.push(drawFailLine());\n const header = `${rel} > ${failedAssertion.fullName}`;\n const messagesArray: string[] =\n failedAssertion.failureMessages.length > 0 ? failedAssertion.failureMessages : [''];\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...messagesArray, ...details.stacks]);\n const deepestLoc = deepestProjectLoc(mergedForStack, projectHint);\n const locLink =\n deepestLoc &&\n (() => {\n const href = preferredEditorHref(deepestLoc.file, deepestLoc.line, opts?.editorCmd);\n const base = `${path.basename(deepestLoc.file)}:${deepestLoc.line}`;\n return osc8(base, href);\n })();\n const headerLine = `${ansi.white(header)}${locLink ? ` ${ansi.dim(`(${locLink})`)}` : ''}`;\n const bullet = (text: string) => `${colorTokens.fail('\u00D7')} ${ansi.white(text)}`;\n out.push(bullet(headerLine));\n const msgLines = messagesArray.join('\\n').split('\\n');\n const assertFallback =\n deepestLoc ||\n (failedAssertion.location && {\n file: file.testFilePath,\n line: failedAssertion.location.line,\n });\n out.push('', ...buildCodeFrameSection(msgLines, ctx, assertFallback), '');\n\n const payload = extractExpectedReceived(file.failureDetails, msgLines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(msgLines, details, ctx, { suppressDiff: hasPretty, stackPreview }),\n );\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(\n ...buildStackSection(\n mergedForStack,\n ctx,\n failedAssertion.location\n ? { file: file.testFilePath, line: failedAssertion.location.line }\n : null,\n ),\n );\n }\n out.push(drawFailLine());\n out.push('');\n }\n }\n // Dashed rule + right-aligned pill\n const failedCount = data.aggregated.numFailedTests;\n out.push(drawRule(colorTokens.failPill(` Failed Tests ${failedCount} `)));\n out.push('');\n const footer = vitestFooter(\n data.aggregated,\n data.aggregated?.startTime ?? data.startTime,\n data.aggregated?.runTimeMs,\n );\n return `${out.join('\\n')}\\n${footer}`;\n}\n", "import { ansi } from './ansi';\n\nexport const isStackLine = (line: string) => /\\s+at\\s+/.test(line);\n\nexport const stripAnsiSimple = (text: string): string => {\n let out = '';\n for (let i = 0; i < text.length; i += 1) {\n const charCode = text.charCodeAt(i);\n if (charCode === 27 /* ESC */) {\n if (text.charAt(i + 1) === '[') {\n i += 2;\n while (i < text.length) {\n const code = text.charCodeAt(i);\n if (code >= 0x40 && code <= 0x7e) {\n break;\n }\n i += 1;\n }\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n out += text.charAt(i);\n }\n return out;\n};\n\nexport const firstTestLocation = (lines: readonly string[], projectHint: RegExp) => {\n for (const ln of lines) {\n const match = ln.match(/\\(([^()]+?:\\d+:\\d+)\\)/) || ln.match(/\\s([\\w./-]+?:\\d+:\\d+)\\s*$/);\n if (match && projectHint.test(match[1]!)) {\n return match[1]!;\n }\n }\n return undefined;\n};\n\nexport const collapseStacks = (lines: readonly string[]) => {\n const out: string[] = [];\n let hidden = 0;\n const flush = () => {\n if (hidden > 0) {\n out.push(ansi.gray(` \u2026 ${hidden} stack frame${hidden === 1 ? '' : 's'} hidden`));\n hidden = 0;\n }\n };\n for (const raw of lines) {\n const ln = stripAnsiSimple(raw);\n if (isStackLine(ln)) {\n // Treat any stack frame inside node_modules or node: internals as noisy.\n // We do NOT keep these frames, as they are generally runner internals and\n // overwhelm the useful frames.\n const noisy = /node_modules\\//.test(ln) || /\\s+at\\s+node:/.test(ln);\n const keep = !noisy;\n if (!keep) {\n hidden += 1;\n // eslint-disable-next-line no-continue\n continue;\n }\n flush();\n out.push(raw);\n } else {\n flush();\n out.push(raw);\n }\n }\n flush();\n return out;\n};\n", "import { program } from \"./lib/program\";\n\nprogram().catch((err: unknown) => {\n // eslint-disable-next-line no-console\n console.error(err);\n process.exit(1);\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "fs", "path", "mkdir", "stat", "exports", "module", "exports", "module", "os", "env", "exports", "module", "path", "fs", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "
|
|
3
|
+
"sources": ["../node_modules/istanbul-lib-coverage/lib/percent.js", "../node_modules/istanbul-lib-coverage/lib/data-properties.js", "../node_modules/istanbul-lib-coverage/lib/coverage-summary.js", "../node_modules/istanbul-lib-coverage/lib/file-coverage.js", "../node_modules/istanbul-lib-coverage/lib/coverage-map.js", "../node_modules/istanbul-lib-coverage/index.js", "../node_modules/make-dir/node_modules/semver/internal/debug.js", "../node_modules/make-dir/node_modules/semver/internal/constants.js", "../node_modules/make-dir/node_modules/semver/internal/re.js", "../node_modules/make-dir/node_modules/semver/internal/parse-options.js", "../node_modules/make-dir/node_modules/semver/internal/identifiers.js", "../node_modules/make-dir/node_modules/semver/classes/semver.js", "../node_modules/make-dir/node_modules/semver/functions/compare.js", "../node_modules/make-dir/node_modules/semver/functions/gte.js", "../node_modules/make-dir/index.js", "../node_modules/has-flag/index.js", "../node_modules/supports-color/index.js", "../node_modules/istanbul-lib-report/lib/file-writer.js", "../node_modules/istanbul-lib-report/lib/xml-writer.js", "../node_modules/istanbul-lib-report/lib/tree.js", "../node_modules/istanbul-lib-report/lib/watermarks.js", "../node_modules/istanbul-lib-report/lib/path.js", "../node_modules/istanbul-lib-report/lib/summarizer-factory.js", "../node_modules/istanbul-lib-report/lib/context.js", "../node_modules/istanbul-lib-report/lib/report-base.js", "../node_modules/istanbul-lib-report/index.js", "../node_modules/istanbul-reports/index.js", "../src/lib/env-utils.ts", "../node_modules/es-toolkit/dist/error/AbortError.mjs", "../node_modules/es-toolkit/dist/error/TimeoutError.mjs", "../node_modules/es-toolkit/dist/promise/delay.mjs", "../node_modules/es-toolkit/dist/promise/timeout.mjs", "../node_modules/es-toolkit/dist/promise/withTimeout.mjs", "../node_modules/es-toolkit/dist/index.mjs", "../src/lib/_exec.ts", "../src/lib/args.ts", "../src/lib/fast-related.ts", "../node_modules/picomatch/lib/constants.js", "../node_modules/picomatch/lib/utils.js", "../node_modules/picomatch/lib/scan.js", "../node_modules/picomatch/lib/parse.js", "../node_modules/picomatch/lib/picomatch.js", "../node_modules/picomatch/index.js", "../node_modules/json5/lib/unicode.js", "../node_modules/json5/lib/util.js", "../node_modules/json5/lib/parse.js", "../node_modules/json5/lib/stringify.js", "../node_modules/json5/lib/index.js", "../src/lib/program.ts", "../src/lib/discovery.ts", "../src/lib/graph-distance.ts", "../src/lib/path-resolver.ts", "../src/lib/coverage-core.ts", "../src/lib/paths.ts", "../src/lib/coverage-print.ts", "../src/lib/ansi.ts", "../src/lib/colors.ts", "../src/lib/bars.ts", "../src/lib/table.ts", "../src/lib/jest-bridge.ts", "../src/lib/stacks.ts", "../src/cli.ts"],
|
|
4
|
+
"sourcesContent": ["/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nmodule.exports = function percent(covered, total) {\n let tmp;\n if (total > 0) {\n tmp = (1000 * 100 * covered) / total;\n return Math.floor(tmp / 10) / 100;\n } else {\n return 100.0;\n }\n};\n", "'use strict';\n\nmodule.exports = function dataProperties(klass, properties) {\n properties.forEach(p => {\n Object.defineProperty(klass.prototype, p, {\n enumerable: true,\n get() {\n return this.data[p];\n }\n });\n });\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst percent = require('./percent');\nconst dataProperties = require('./data-properties');\n\nfunction blankSummary() {\n const empty = () => ({\n total: 0,\n covered: 0,\n skipped: 0,\n pct: 'Unknown'\n });\n\n return {\n lines: empty(),\n statements: empty(),\n functions: empty(),\n branches: empty(),\n branchesTrue: empty()\n };\n}\n\n// asserts that a data object \"looks like\" a summary coverage object\nfunction assertValidSummary(obj) {\n const valid =\n obj && obj.lines && obj.statements && obj.functions && obj.branches;\n if (!valid) {\n throw new Error(\n 'Invalid summary coverage object, missing keys, found:' +\n Object.keys(obj).join(',')\n );\n }\n}\n\n/**\n * CoverageSummary provides a summary of code coverage . It exposes 4 properties,\n * `lines`, `statements`, `branches`, and `functions`. Each of these properties\n * is an object that has 4 keys `total`, `covered`, `skipped` and `pct`.\n * `pct` is a percentage number (0-100).\n */\nclass CoverageSummary {\n /**\n * @constructor\n * @param {Object|CoverageSummary} [obj=undefined] an optional data object or\n * another coverage summary to initialize this object with.\n */\n constructor(obj) {\n if (!obj) {\n this.data = blankSummary();\n } else if (obj instanceof CoverageSummary) {\n this.data = obj.data;\n } else {\n this.data = obj;\n }\n assertValidSummary(this.data);\n }\n\n /**\n * merges a second summary coverage object into this one\n * @param {CoverageSummary} obj - another coverage summary object\n */\n merge(obj) {\n const keys = [\n 'lines',\n 'statements',\n 'branches',\n 'functions',\n 'branchesTrue'\n ];\n keys.forEach(key => {\n if (obj[key]) {\n this[key].total += obj[key].total;\n this[key].covered += obj[key].covered;\n this[key].skipped += obj[key].skipped;\n this[key].pct = percent(this[key].covered, this[key].total);\n }\n });\n\n return this;\n }\n\n /**\n * returns a POJO that is JSON serializable. May be used to get the raw\n * summary object.\n */\n toJSON() {\n return this.data;\n }\n\n /**\n * return true if summary has no lines of code\n */\n isEmpty() {\n return this.lines.total === 0;\n }\n}\n\ndataProperties(CoverageSummary, [\n 'lines',\n 'statements',\n 'functions',\n 'branches',\n 'branchesTrue'\n]);\n\nmodule.exports = {\n CoverageSummary\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst percent = require('./percent');\nconst dataProperties = require('./data-properties');\nconst { CoverageSummary } = require('./coverage-summary');\n\n// returns a data object that represents empty coverage\nfunction emptyCoverage(filePath, reportLogic) {\n const cov = {\n path: filePath,\n statementMap: {},\n fnMap: {},\n branchMap: {},\n s: {},\n f: {},\n b: {}\n };\n if (reportLogic) cov.bT = {};\n return cov;\n}\n\n// asserts that a data object \"looks like\" a coverage object\nfunction assertValidObject(obj) {\n const valid =\n obj &&\n obj.path &&\n obj.statementMap &&\n obj.fnMap &&\n obj.branchMap &&\n obj.s &&\n obj.f &&\n obj.b;\n if (!valid) {\n throw new Error(\n 'Invalid file coverage object, missing keys, found:' +\n Object.keys(obj).join(',')\n );\n }\n}\n\nconst keyFromLoc = ({ start, end }) =>\n `${start.line}|${start.column}|${end.line}|${end.column}`;\n\nconst isObj = o => !!o && typeof o === 'object';\nconst isLineCol = o =>\n isObj(o) && typeof o.line === 'number' && typeof o.column === 'number';\nconst isLoc = o => isObj(o) && isLineCol(o.start) && isLineCol(o.end);\nconst getLoc = o => (isLoc(o) ? o : isLoc(o.loc) ? o.loc : null);\n\n// When merging, we can have a case where two ranges cover\n// the same block of code with `hits=1`, and each carve out a\n// different range with `hits=0` to indicate it's uncovered.\n// Find the nearest container so that we can properly indicate\n// that both sections are hit.\n// Returns null if no containing item is found.\nconst findNearestContainer = (item, map) => {\n const itemLoc = getLoc(item);\n if (!itemLoc) return null;\n // the B item is not an identified range in the A set, BUT\n // it may be contained by an identified A range. If so, then\n // any hit of that containing A range counts as a hit of this\n // B range as well. We have to find the *narrowest* containing\n // range to be accurate, since ranges can be hit and un-hit\n // in a nested fashion.\n let nearestContainingItem = null;\n let containerDistance = null;\n let containerKey = null;\n for (const [i, mapItem] of Object.entries(map)) {\n const mapLoc = getLoc(mapItem);\n if (!mapLoc) continue;\n // contained if all of line distances are > 0\n // or line distance is 0 and col dist is >= 0\n const distance = [\n itemLoc.start.line - mapLoc.start.line,\n itemLoc.start.column - mapLoc.start.column,\n mapLoc.end.line - itemLoc.end.line,\n mapLoc.end.column - itemLoc.end.column\n ];\n if (\n distance[0] < 0 ||\n distance[2] < 0 ||\n (distance[0] === 0 && distance[1] < 0) ||\n (distance[2] === 0 && distance[3] < 0)\n ) {\n continue;\n }\n if (nearestContainingItem === null) {\n containerDistance = distance;\n nearestContainingItem = mapItem;\n containerKey = i;\n continue;\n }\n // closer line more relevant than closer column\n const closerBefore =\n distance[0] < containerDistance[0] ||\n (distance[0] === 0 && distance[1] < containerDistance[1]);\n const closerAfter =\n distance[2] < containerDistance[2] ||\n (distance[2] === 0 && distance[3] < containerDistance[3]);\n if (closerBefore || closerAfter) {\n // closer\n containerDistance = distance;\n nearestContainingItem = mapItem;\n containerKey = i;\n }\n }\n return containerKey;\n};\n\n// either add two numbers, or all matching entries in a number[]\nconst addHits = (aHits, bHits) => {\n if (typeof aHits === 'number' && typeof bHits === 'number') {\n return aHits + bHits;\n } else if (Array.isArray(aHits) && Array.isArray(bHits)) {\n return aHits.map((a, i) => (a || 0) + (bHits[i] || 0));\n }\n return null;\n};\n\nconst addNearestContainerHits = (item, itemHits, map, mapHits) => {\n const container = findNearestContainer(item, map);\n if (container) {\n return addHits(itemHits, mapHits[container]);\n } else {\n return itemHits;\n }\n};\n\nconst mergeProp = (aHits, aMap, bHits, bMap, itemKey = keyFromLoc) => {\n const aItems = {};\n for (const [key, itemHits] of Object.entries(aHits)) {\n const item = aMap[key];\n aItems[itemKey(item)] = [itemHits, item];\n }\n const bItems = {};\n for (const [key, itemHits] of Object.entries(bHits)) {\n const item = bMap[key];\n bItems[itemKey(item)] = [itemHits, item];\n }\n const mergedItems = {};\n for (const [key, aValue] of Object.entries(aItems)) {\n let aItemHits = aValue[0];\n const aItem = aValue[1];\n const bValue = bItems[key];\n if (!bValue) {\n // not an identified range in b, but might be contained by one\n aItemHits = addNearestContainerHits(aItem, aItemHits, bMap, bHits);\n } else {\n // is an identified range in b, so add the hits together\n aItemHits = addHits(aItemHits, bValue[0]);\n }\n mergedItems[key] = [aItemHits, aItem];\n }\n // now find the items in b that are not in a. already added matches.\n for (const [key, bValue] of Object.entries(bItems)) {\n let bItemHits = bValue[0];\n const bItem = bValue[1];\n if (mergedItems[key]) continue;\n // not an identified range in b, but might be contained by one\n bItemHits = addNearestContainerHits(bItem, bItemHits, aMap, aHits);\n mergedItems[key] = [bItemHits, bItem];\n }\n\n const hits = {};\n const map = {};\n\n Object.values(mergedItems).forEach(([itemHits, item], i) => {\n hits[i] = itemHits;\n map[i] = item;\n });\n\n return [hits, map];\n};\n\n/**\n * provides a read-only view of coverage for a single file.\n * The deep structure of this object is documented elsewhere. It has the following\n * properties:\n *\n * * `path` - the file path for which coverage is being tracked\n * * `statementMap` - map of statement locations keyed by statement index\n * * `fnMap` - map of function metadata keyed by function index\n * * `branchMap` - map of branch metadata keyed by branch index\n * * `s` - hit counts for statements\n * * `f` - hit count for functions\n * * `b` - hit count for branches\n */\nclass FileCoverage {\n /**\n * @constructor\n * @param {Object|FileCoverage|String} pathOrObj is a string that initializes\n * and empty coverage object with the specified file path or a data object that\n * has all the required properties for a file coverage object.\n */\n constructor(pathOrObj, reportLogic = false) {\n if (!pathOrObj) {\n throw new Error(\n 'Coverage must be initialized with a path or an object'\n );\n }\n if (typeof pathOrObj === 'string') {\n this.data = emptyCoverage(pathOrObj, reportLogic);\n } else if (pathOrObj instanceof FileCoverage) {\n this.data = pathOrObj.data;\n } else if (typeof pathOrObj === 'object') {\n this.data = pathOrObj;\n } else {\n throw new Error('Invalid argument to coverage constructor');\n }\n assertValidObject(this.data);\n }\n\n /**\n * returns computed line coverage from statement coverage.\n * This is a map of hits keyed by line number in the source.\n */\n getLineCoverage() {\n const statementMap = this.data.statementMap;\n const statements = this.data.s;\n const lineMap = Object.create(null);\n\n Object.entries(statements).forEach(([st, count]) => {\n /* istanbul ignore if: is this even possible? */\n if (!statementMap[st]) {\n return;\n }\n const { line } = statementMap[st].start;\n const prevVal = lineMap[line];\n if (prevVal === undefined || prevVal < count) {\n lineMap[line] = count;\n }\n });\n return lineMap;\n }\n\n /**\n * returns an array of uncovered line numbers.\n * @returns {Array} an array of line numbers for which no hits have been\n * collected.\n */\n getUncoveredLines() {\n const lc = this.getLineCoverage();\n const ret = [];\n Object.entries(lc).forEach(([l, hits]) => {\n if (hits === 0) {\n ret.push(l);\n }\n });\n return ret;\n }\n\n /**\n * returns a map of branch coverage by source line number.\n * @returns {Object} an object keyed by line number. Each object\n * has a `covered`, `total` and `coverage` (percentage) property.\n */\n getBranchCoverageByLine() {\n const branchMap = this.branchMap;\n const branches = this.b;\n const ret = {};\n Object.entries(branchMap).forEach(([k, map]) => {\n const line = map.line || map.loc.start.line;\n const branchData = branches[k];\n ret[line] = ret[line] || [];\n ret[line].push(...branchData);\n });\n Object.entries(ret).forEach(([k, dataArray]) => {\n const covered = dataArray.filter(item => item > 0);\n const coverage = (covered.length / dataArray.length) * 100;\n ret[k] = {\n covered: covered.length,\n total: dataArray.length,\n coverage\n };\n });\n return ret;\n }\n\n /**\n * return a JSON-serializable POJO for this file coverage object\n */\n toJSON() {\n return this.data;\n }\n\n /**\n * merges a second coverage object into this one, updating hit counts\n * @param {FileCoverage} other - the coverage object to be merged into this one.\n * Note that the other object should have the same structure as this one (same file).\n */\n merge(other) {\n if (other.all === true) {\n return;\n }\n\n if (this.all === true) {\n this.data = other.data;\n return;\n }\n\n let [hits, map] = mergeProp(\n this.s,\n this.statementMap,\n other.s,\n other.statementMap\n );\n this.data.s = hits;\n this.data.statementMap = map;\n\n const keyFromLocProp = x => keyFromLoc(x.loc);\n const keyFromLocationsProp = x => keyFromLoc(x.locations[0]);\n\n [hits, map] = mergeProp(\n this.f,\n this.fnMap,\n other.f,\n other.fnMap,\n keyFromLocProp\n );\n this.data.f = hits;\n this.data.fnMap = map;\n\n [hits, map] = mergeProp(\n this.b,\n this.branchMap,\n other.b,\n other.branchMap,\n keyFromLocationsProp\n );\n this.data.b = hits;\n this.data.branchMap = map;\n\n // Tracking additional information about branch truthiness\n // can be optionally enabled:\n if (this.bT && other.bT) {\n [hits, map] = mergeProp(\n this.bT,\n this.branchMap,\n other.bT,\n other.branchMap,\n keyFromLocationsProp\n );\n this.data.bT = hits;\n }\n }\n\n computeSimpleTotals(property) {\n let stats = this[property];\n\n if (typeof stats === 'function') {\n stats = stats.call(this);\n }\n\n const ret = {\n total: Object.keys(stats).length,\n covered: Object.values(stats).filter(v => !!v).length,\n skipped: 0\n };\n ret.pct = percent(ret.covered, ret.total);\n return ret;\n }\n\n computeBranchTotals(property) {\n const stats = this[property];\n const ret = { total: 0, covered: 0, skipped: 0 };\n\n Object.values(stats).forEach(branches => {\n ret.covered += branches.filter(hits => hits > 0).length;\n ret.total += branches.length;\n });\n ret.pct = percent(ret.covered, ret.total);\n return ret;\n }\n\n /**\n * resets hit counts for all statements, functions and branches\n * in this coverage object resulting in zero coverage.\n */\n resetHits() {\n const statements = this.s;\n const functions = this.f;\n const branches = this.b;\n const branchesTrue = this.bT;\n Object.keys(statements).forEach(s => {\n statements[s] = 0;\n });\n Object.keys(functions).forEach(f => {\n functions[f] = 0;\n });\n Object.keys(branches).forEach(b => {\n branches[b].fill(0);\n });\n // Tracking additional information about branch truthiness\n // can be optionally enabled:\n if (branchesTrue) {\n Object.keys(branchesTrue).forEach(bT => {\n branchesTrue[bT].fill(0);\n });\n }\n }\n\n /**\n * returns a CoverageSummary for this file coverage object\n * @returns {CoverageSummary}\n */\n toSummary() {\n const ret = {};\n ret.lines = this.computeSimpleTotals('getLineCoverage');\n ret.functions = this.computeSimpleTotals('f', 'fnMap');\n ret.statements = this.computeSimpleTotals('s', 'statementMap');\n ret.branches = this.computeBranchTotals('b');\n // Tracking additional information about branch truthiness\n // can be optionally enabled:\n if (this.bT) {\n ret.branchesTrue = this.computeBranchTotals('bT');\n }\n return new CoverageSummary(ret);\n }\n}\n\n// expose coverage data attributes\ndataProperties(FileCoverage, [\n 'path',\n 'statementMap',\n 'fnMap',\n 'branchMap',\n 's',\n 'f',\n 'b',\n 'bT',\n 'all'\n]);\n\nmodule.exports = {\n FileCoverage,\n // exported for testing\n findNearestContainer,\n addHits,\n addNearestContainerHits\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst { FileCoverage } = require('./file-coverage');\nconst { CoverageSummary } = require('./coverage-summary');\n\nfunction maybeConstruct(obj, klass) {\n if (obj instanceof klass) {\n return obj;\n }\n\n return new klass(obj);\n}\n\nfunction loadMap(source) {\n const data = Object.create(null);\n if (!source) {\n return data;\n }\n\n Object.entries(source).forEach(([k, cov]) => {\n data[k] = maybeConstruct(cov, FileCoverage);\n });\n\n return data;\n}\n\n/** CoverageMap is a map of `FileCoverage` objects keyed by file paths. */\nclass CoverageMap {\n /**\n * @constructor\n * @param {Object} [obj=undefined] obj A coverage map from which to initialize this\n * map's contents. This can be the raw global coverage object.\n */\n constructor(obj) {\n if (obj instanceof CoverageMap) {\n this.data = obj.data;\n } else {\n this.data = loadMap(obj);\n }\n }\n\n /**\n * merges a second coverage map into this one\n * @param {CoverageMap} obj - a CoverageMap or its raw data. Coverage is merged\n * correctly for the same files and additional file coverage keys are created\n * as needed.\n */\n merge(obj) {\n const other = maybeConstruct(obj, CoverageMap);\n Object.values(other.data).forEach(fc => {\n this.addFileCoverage(fc);\n });\n }\n\n /**\n * filter the coveragemap based on the callback provided\n * @param {Function (filename)} callback - Returns true if the path\n * should be included in the coveragemap. False if it should be\n * removed.\n */\n filter(callback) {\n Object.keys(this.data).forEach(k => {\n if (!callback(k)) {\n delete this.data[k];\n }\n });\n }\n\n /**\n * returns a JSON-serializable POJO for this coverage map\n * @returns {Object}\n */\n toJSON() {\n return this.data;\n }\n\n /**\n * returns an array for file paths for which this map has coverage\n * @returns {Array{string}} - array of files\n */\n files() {\n return Object.keys(this.data);\n }\n\n /**\n * returns the file coverage for the specified file.\n * @param {String} file\n * @returns {FileCoverage}\n */\n fileCoverageFor(file) {\n const fc = this.data[file];\n if (!fc) {\n throw new Error(`No file coverage available for: ${file}`);\n }\n return fc;\n }\n\n /**\n * adds a file coverage object to this map. If the path for the object,\n * already exists in the map, it is merged with the existing coverage\n * otherwise a new key is added to the map.\n * @param {FileCoverage} fc the file coverage to add\n */\n addFileCoverage(fc) {\n const cov = new FileCoverage(fc);\n const { path } = cov;\n if (this.data[path]) {\n this.data[path].merge(cov);\n } else {\n this.data[path] = cov;\n }\n }\n\n /**\n * returns the coverage summary for all the file coverage objects in this map.\n * @returns {CoverageSummary}\n */\n getCoverageSummary() {\n const ret = new CoverageSummary();\n Object.values(this.data).forEach(fc => {\n ret.merge(fc.toSummary());\n });\n\n return ret;\n }\n}\n\nmodule.exports = {\n CoverageMap\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\n/**\n * istanbul-lib-coverage exports an API that allows you to create and manipulate\n * file coverage, coverage maps (a set of file coverage objects) and summary\n * coverage objects. File coverage for the same file can be merged as can\n * entire coverage maps.\n *\n * @module Exports\n */\nconst { FileCoverage } = require('./lib/file-coverage');\nconst { CoverageMap } = require('./lib/coverage-map');\nconst { CoverageSummary } = require('./lib/coverage-summary');\n\nmodule.exports = {\n /**\n * creates a coverage summary object\n * @param {Object} obj an argument with the same semantics\n * as the one passed to the `CoverageSummary` constructor\n * @returns {CoverageSummary}\n */\n createCoverageSummary(obj) {\n if (obj && obj instanceof CoverageSummary) {\n return obj;\n }\n return new CoverageSummary(obj);\n },\n /**\n * creates a CoverageMap object\n * @param {Object} obj optional - an argument with the same semantics\n * as the one passed to the CoverageMap constructor.\n * @returns {CoverageMap}\n */\n createCoverageMap(obj) {\n if (obj && obj instanceof CoverageMap) {\n return obj;\n }\n return new CoverageMap(obj);\n },\n /**\n * creates a FileCoverage object\n * @param {Object} obj optional - an argument with the same semantics\n * as the one passed to the FileCoverage constructor.\n * @returns {FileCoverage}\n */\n createFileCoverage(obj) {\n if (obj && obj instanceof FileCoverage) {\n return obj;\n }\n return new FileCoverage(obj);\n }\n};\n\n/** classes exported for reuse */\nmodule.exports.classes = {\n /**\n * the file coverage constructor\n */\n FileCoverage\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\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 {\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 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 gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst {promisify} = require('util');\nconst semverGte = require('semver/functions/gte');\n\nconst useNativeRecursiveOption = semverGte(process.version, '10.12.0');\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nconst checkPath = pth => {\n\tif (process.platform === 'win32') {\n\t\tconst pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''));\n\n\t\tif (pathHasInvalidWinCharacters) {\n\t\t\tconst error = new Error(`Path contains invalid characters: ${pth}`);\n\t\t\terror.code = 'EINVAL';\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\nconst processOptions = options => {\n\tconst defaults = {\n\t\tmode: 0o777,\n\t\tfs\n\t};\n\n\treturn {\n\t\t...defaults,\n\t\t...options\n\t};\n};\n\nconst permissionError = pth => {\n\t// This replicates the exception of `fs.mkdir` with native the\n\t// `recusive` option when run on an invalid drive under Windows.\n\tconst error = new Error(`operation not permitted, mkdir '${pth}'`);\n\terror.code = 'EPERM';\n\terror.errno = -4048;\n\terror.path = pth;\n\terror.syscall = 'mkdir';\n\treturn error;\n};\n\nconst makeDir = async (input, options) => {\n\tcheckPath(input);\n\toptions = processOptions(options);\n\n\tconst mkdir = promisify(options.fs.mkdir);\n\tconst stat = promisify(options.fs.stat);\n\n\tif (useNativeRecursiveOption && options.fs.mkdir === fs.mkdir) {\n\t\tconst pth = path.resolve(input);\n\n\t\tawait mkdir(pth, {\n\t\t\tmode: options.mode,\n\t\t\trecursive: true\n\t\t});\n\n\t\treturn pth;\n\t}\n\n\tconst make = async pth => {\n\t\ttry {\n\t\t\tawait mkdir(pth, options.mode);\n\n\t\t\treturn pth;\n\t\t} catch (error) {\n\t\t\tif (error.code === 'EPERM') {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (error.code === 'ENOENT') {\n\t\t\t\tif (path.dirname(pth) === pth) {\n\t\t\t\t\tthrow permissionError(pth);\n\t\t\t\t}\n\n\t\t\t\tif (error.message.includes('null bytes')) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tawait make(path.dirname(pth));\n\n\t\t\t\treturn make(pth);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst stats = await stat(pth);\n\t\t\t\tif (!stats.isDirectory()) {\n\t\t\t\t\tthrow new Error('The path is not a directory');\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn pth;\n\t\t}\n\t};\n\n\treturn make(path.resolve(input));\n};\n\nmodule.exports = makeDir;\n\nmodule.exports.sync = (input, options) => {\n\tcheckPath(input);\n\toptions = processOptions(options);\n\n\tif (useNativeRecursiveOption && options.fs.mkdirSync === fs.mkdirSync) {\n\t\tconst pth = path.resolve(input);\n\n\t\tfs.mkdirSync(pth, {\n\t\t\tmode: options.mode,\n\t\t\trecursive: true\n\t\t});\n\n\t\treturn pth;\n\t}\n\n\tconst make = pth => {\n\t\ttry {\n\t\t\toptions.fs.mkdirSync(pth, options.mode);\n\t\t} catch (error) {\n\t\t\tif (error.code === 'EPERM') {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (error.code === 'ENOENT') {\n\t\t\t\tif (path.dirname(pth) === pth) {\n\t\t\t\t\tthrow permissionError(pth);\n\t\t\t\t}\n\n\t\t\t\tif (error.message.includes('null bytes')) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tmake(path.dirname(pth));\n\t\t\t\treturn make(pth);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (!options.fs.statSync(pth).isDirectory()) {\n\t\t\t\t\tthrow new Error('The path is not a directory');\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn pth;\n\t};\n\n\treturn make(path.resolve(input));\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst path = require('path');\nconst fs = require('fs');\nconst mkdirp = require('make-dir');\nconst supportsColor = require('supports-color');\n\n/**\n * Base class for writing content\n * @class ContentWriter\n * @constructor\n */\nclass ContentWriter {\n /**\n * returns the colorized version of a string. Typically,\n * content writers that write to files will return the\n * same string and ones writing to a tty will wrap it in\n * appropriate escape sequences.\n * @param {String} str the string to colorize\n * @param {String} clazz one of `high`, `medium` or `low`\n * @returns {String} the colorized form of the string\n */\n colorize(str /*, clazz*/) {\n return str;\n }\n\n /**\n * writes a string appended with a newline to the destination\n * @param {String} str the string to write\n */\n println(str) {\n this.write(`${str}\\n`);\n }\n\n /**\n * closes this content writer. Should be called after all writes are complete.\n */\n close() {}\n}\n\n/**\n * a content writer that writes to a file\n * @param {Number} fd - the file descriptor\n * @extends ContentWriter\n * @constructor\n */\nclass FileContentWriter extends ContentWriter {\n constructor(fd) {\n super();\n\n this.fd = fd;\n }\n\n write(str) {\n fs.writeSync(this.fd, str);\n }\n\n close() {\n fs.closeSync(this.fd);\n }\n}\n\n// allow stdout to be captured for tests.\nlet capture = false;\nlet output = '';\n\n/**\n * a content writer that writes to the console\n * @extends ContentWriter\n * @constructor\n */\nclass ConsoleWriter extends ContentWriter {\n write(str) {\n if (capture) {\n output += str;\n } else {\n process.stdout.write(str);\n }\n }\n\n colorize(str, clazz) {\n const colors = {\n low: '31;1',\n medium: '33;1',\n high: '32;1'\n };\n\n /* istanbul ignore next: different modes for CI and local */\n if (supportsColor.stdout && colors[clazz]) {\n return `\\u001b[${colors[clazz]}m${str}\\u001b[0m`;\n }\n return str;\n }\n}\n\n/**\n * utility for writing files under a specific directory\n * @class FileWriter\n * @param {String} baseDir the base directory under which files should be written\n * @constructor\n */\nclass FileWriter {\n constructor(baseDir) {\n if (!baseDir) {\n throw new Error('baseDir must be specified');\n }\n this.baseDir = baseDir;\n }\n\n /**\n * static helpers for capturing stdout report output;\n * super useful for tests!\n */\n static startCapture() {\n capture = true;\n }\n\n static stopCapture() {\n capture = false;\n }\n\n static getOutput() {\n return output;\n }\n\n static resetOutput() {\n output = '';\n }\n\n /**\n * returns a FileWriter that is rooted at the supplied subdirectory\n * @param {String} subdir the subdirectory under which to root the\n * returned FileWriter\n * @returns {FileWriter}\n */\n writerForDir(subdir) {\n if (path.isAbsolute(subdir)) {\n throw new Error(\n `Cannot create subdir writer for absolute path: ${subdir}`\n );\n }\n return new FileWriter(`${this.baseDir}/${subdir}`);\n }\n\n /**\n * copies a file from a source directory to a destination name\n * @param {String} source path to source file\n * @param {String} dest relative path to destination file\n * @param {String} [header=undefined] optional text to prepend to destination\n * (e.g., an \"this file is autogenerated\" comment, copyright notice, etc.)\n */\n copyFile(source, dest, header) {\n if (path.isAbsolute(dest)) {\n throw new Error(`Cannot write to absolute path: ${dest}`);\n }\n dest = path.resolve(this.baseDir, dest);\n mkdirp.sync(path.dirname(dest));\n let contents;\n if (header) {\n contents = header + fs.readFileSync(source, 'utf8');\n } else {\n contents = fs.readFileSync(source);\n }\n fs.writeFileSync(dest, contents);\n }\n\n /**\n * returns a content writer for writing content to the supplied file.\n * @param {String|null} file the relative path to the file or the special\n * values `\"-\"` or `null` for writing to the console\n * @returns {ContentWriter}\n */\n writeFile(file) {\n if (file === null || file === '-') {\n return new ConsoleWriter();\n }\n if (path.isAbsolute(file)) {\n throw new Error(`Cannot write to absolute path: ${file}`);\n }\n file = path.resolve(this.baseDir, file);\n mkdirp.sync(path.dirname(file));\n return new FileContentWriter(fs.openSync(file, 'w'));\n }\n}\n\nmodule.exports = FileWriter;\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst INDENT = ' ';\n\nfunction attrString(attrs) {\n return Object.entries(attrs || {})\n .map(([k, v]) => ` ${k}=\"${v}\"`)\n .join('');\n}\n\n/**\n * a utility class to produce well-formed, indented XML\n * @param {ContentWriter} contentWriter the content writer that this utility wraps\n * @constructor\n */\nclass XMLWriter {\n constructor(contentWriter) {\n this.cw = contentWriter;\n this.stack = [];\n }\n\n indent(str) {\n return this.stack.map(() => INDENT).join('') + str;\n }\n\n /**\n * writes the opening XML tag with the supplied attributes\n * @param {String} name tag name\n * @param {Object} [attrs=null] attrs attributes for the tag\n */\n openTag(name, attrs) {\n const str = this.indent(`<${name + attrString(attrs)}>`);\n this.cw.println(str);\n this.stack.push(name);\n }\n\n /**\n * closes an open XML tag.\n * @param {String} name - tag name to close. This must match the writer's\n * notion of the tag that is currently open.\n */\n closeTag(name) {\n if (this.stack.length === 0) {\n throw new Error(`Attempt to close tag ${name} when not opened`);\n }\n const stashed = this.stack.pop();\n const str = `</${name}>`;\n\n if (stashed !== name) {\n throw new Error(\n `Attempt to close tag ${name} when ${stashed} was the one open`\n );\n }\n this.cw.println(this.indent(str));\n }\n\n /**\n * writes a tag and its value opening and closing it at the same time\n * @param {String} name tag name\n * @param {Object} [attrs=null] attrs tag attributes\n * @param {String} [content=null] content optional tag content\n */\n inlineTag(name, attrs, content) {\n let str = '<' + name + attrString(attrs);\n if (content) {\n str += `>${content}</${name}>`;\n } else {\n str += '/>';\n }\n str = this.indent(str);\n this.cw.println(str);\n }\n\n /**\n * closes all open tags and ends the document\n */\n closeAll() {\n this.stack\n .slice()\n .reverse()\n .forEach(name => {\n this.closeTag(name);\n });\n }\n}\n\nmodule.exports = XMLWriter;\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\n/**\n * An object with methods that are called during the traversal of the coverage tree.\n * A visitor has the following methods that are called during tree traversal.\n *\n * * `onStart(root, state)` - called before traversal begins\n * * `onSummary(node, state)` - called for every summary node\n * * `onDetail(node, state)` - called for every detail node\n * * `onSummaryEnd(node, state)` - called after all children have been visited for\n * a summary node.\n * * `onEnd(root, state)` - called after traversal ends\n *\n * @param delegate - a partial visitor that only implements the methods of interest\n * The visitor object supplies the missing methods as noops. For example, reports\n * that only need the final coverage summary need implement `onStart` and nothing\n * else. Reports that use only detailed coverage information need implement `onDetail`\n * and nothing else.\n * @constructor\n */\nclass Visitor {\n constructor(delegate) {\n this.delegate = delegate;\n }\n}\n\n['Start', 'End', 'Summary', 'SummaryEnd', 'Detail']\n .map(k => `on${k}`)\n .forEach(fn => {\n Object.defineProperty(Visitor.prototype, fn, {\n writable: true,\n value(node, state) {\n if (typeof this.delegate[fn] === 'function') {\n this.delegate[fn](node, state);\n }\n }\n });\n });\n\nclass CompositeVisitor extends Visitor {\n constructor(visitors) {\n super();\n\n if (!Array.isArray(visitors)) {\n visitors = [visitors];\n }\n this.visitors = visitors.map(v => {\n if (v instanceof Visitor) {\n return v;\n }\n return new Visitor(v);\n });\n }\n}\n\n['Start', 'Summary', 'SummaryEnd', 'Detail', 'End']\n .map(k => `on${k}`)\n .forEach(fn => {\n Object.defineProperty(CompositeVisitor.prototype, fn, {\n value(node, state) {\n this.visitors.forEach(v => {\n v[fn](node, state);\n });\n }\n });\n });\n\nclass BaseNode {\n isRoot() {\n return !this.getParent();\n }\n\n /**\n * visit all nodes depth-first from this node down. Note that `onStart`\n * and `onEnd` are never called on the visitor even if the current\n * node is the root of the tree.\n * @param visitor a full visitor that is called during tree traversal\n * @param state optional state that is passed around\n */\n visit(visitor, state) {\n if (this.isSummary()) {\n visitor.onSummary(this, state);\n } else {\n visitor.onDetail(this, state);\n }\n\n this.getChildren().forEach(child => {\n child.visit(visitor, state);\n });\n\n if (this.isSummary()) {\n visitor.onSummaryEnd(this, state);\n }\n }\n}\n\n/**\n * abstract base class for a coverage tree.\n * @constructor\n */\nclass BaseTree {\n constructor(root) {\n this.root = root;\n }\n\n /**\n * returns the root node of the tree\n */\n getRoot() {\n return this.root;\n }\n\n /**\n * visits the tree depth-first with the supplied partial visitor\n * @param visitor - a potentially partial visitor\n * @param state - the state to be passed around during tree traversal\n */\n visit(visitor, state) {\n if (!(visitor instanceof Visitor)) {\n visitor = new Visitor(visitor);\n }\n visitor.onStart(this.getRoot(), state);\n this.getRoot().visit(visitor, state);\n visitor.onEnd(this.getRoot(), state);\n }\n}\n\nmodule.exports = {\n BaseTree,\n BaseNode,\n Visitor,\n CompositeVisitor\n};\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nmodule.exports = {\n getDefault() {\n return {\n statements: [50, 80],\n functions: [50, 80],\n branches: [50, 80],\n lines: [50, 80]\n };\n }\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst path = require('path');\nlet parsePath = path.parse;\nlet SEP = path.sep;\nconst origParser = parsePath;\nconst origSep = SEP;\n\nfunction makeRelativeNormalizedPath(str, sep) {\n const parsed = parsePath(str);\n let root = parsed.root;\n let dir;\n let file = parsed.base;\n let quoted;\n let pos;\n\n // handle a weird windows case separately\n if (sep === '\\\\') {\n pos = root.indexOf(':\\\\');\n if (pos >= 0) {\n root = root.substring(0, pos + 2);\n }\n }\n dir = parsed.dir.substring(root.length);\n\n if (str === '') {\n return [];\n }\n\n if (sep !== '/') {\n quoted = new RegExp(sep.replace(/\\W/g, '\\\\$&'), 'g');\n dir = dir.replace(quoted, '/');\n file = file.replace(quoted, '/'); // excessively paranoid?\n }\n\n if (dir !== '') {\n dir = `${dir}/${file}`;\n } else {\n dir = file;\n }\n if (dir.substring(0, 1) === '/') {\n dir = dir.substring(1);\n }\n dir = dir.split(/\\/+/);\n return dir;\n}\n\nclass Path {\n constructor(strOrArray) {\n if (Array.isArray(strOrArray)) {\n this.v = strOrArray;\n } else if (typeof strOrArray === 'string') {\n this.v = makeRelativeNormalizedPath(strOrArray, SEP);\n } else {\n throw new Error(\n `Invalid Path argument must be string or array:${strOrArray}`\n );\n }\n }\n\n toString() {\n return this.v.join('/');\n }\n\n hasParent() {\n return this.v.length > 0;\n }\n\n parent() {\n if (!this.hasParent()) {\n throw new Error('Unable to get parent for 0 elem path');\n }\n const p = this.v.slice();\n p.pop();\n return new Path(p);\n }\n\n elements() {\n return this.v.slice();\n }\n\n name() {\n return this.v.slice(-1)[0];\n }\n\n contains(other) {\n let i;\n if (other.length > this.length) {\n return false;\n }\n for (i = 0; i < other.length; i += 1) {\n if (this.v[i] !== other.v[i]) {\n return false;\n }\n }\n return true;\n }\n\n ancestorOf(other) {\n return other.contains(this) && other.length !== this.length;\n }\n\n descendantOf(other) {\n return this.contains(other) && other.length !== this.length;\n }\n\n commonPrefixPath(other) {\n const len = this.length > other.length ? other.length : this.length;\n let i;\n const ret = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.v[i] === other.v[i]) {\n ret.push(this.v[i]);\n } else {\n break;\n }\n }\n return new Path(ret);\n }\n\n static compare(a, b) {\n const al = a.length;\n const bl = b.length;\n\n if (al < bl) {\n return -1;\n }\n\n if (al > bl) {\n return 1;\n }\n\n const astr = a.toString();\n const bstr = b.toString();\n return astr < bstr ? -1 : astr > bstr ? 1 : 0;\n }\n}\n\n['push', 'pop', 'shift', 'unshift', 'splice'].forEach(fn => {\n Object.defineProperty(Path.prototype, fn, {\n value(...args) {\n return this.v[fn](...args);\n }\n });\n});\n\nObject.defineProperty(Path.prototype, 'length', {\n enumerable: true,\n get() {\n return this.v.length;\n }\n});\n\nmodule.exports = Path;\nPath.tester = {\n setParserAndSep(p, sep) {\n parsePath = p;\n SEP = sep;\n },\n reset() {\n parsePath = origParser;\n SEP = origSep;\n }\n};\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nconst coverage = require('istanbul-lib-coverage');\nconst Path = require('./path');\nconst { BaseNode, BaseTree } = require('./tree');\n\nclass ReportNode extends BaseNode {\n constructor(path, fileCoverage) {\n super();\n\n this.path = path;\n this.parent = null;\n this.fileCoverage = fileCoverage;\n this.children = [];\n }\n\n static createRoot(children) {\n const root = new ReportNode(new Path([]));\n\n children.forEach(child => {\n root.addChild(child);\n });\n\n return root;\n }\n\n addChild(child) {\n child.parent = this;\n this.children.push(child);\n }\n\n asRelative(p) {\n if (p.substring(0, 1) === '/') {\n return p.substring(1);\n }\n return p;\n }\n\n getQualifiedName() {\n return this.asRelative(this.path.toString());\n }\n\n getRelativeName() {\n const parent = this.getParent();\n const myPath = this.path;\n let relPath;\n let i;\n const parentPath = parent ? parent.path : new Path([]);\n if (parentPath.ancestorOf(myPath)) {\n relPath = new Path(myPath.elements());\n for (i = 0; i < parentPath.length; i += 1) {\n relPath.shift();\n }\n return this.asRelative(relPath.toString());\n }\n return this.asRelative(this.path.toString());\n }\n\n getParent() {\n return this.parent;\n }\n\n getChildren() {\n return this.children;\n }\n\n isSummary() {\n return !this.fileCoverage;\n }\n\n getFileCoverage() {\n return this.fileCoverage;\n }\n\n getCoverageSummary(filesOnly) {\n const cacheProp = `c_${filesOnly ? 'files' : 'full'}`;\n let summary;\n\n if (Object.prototype.hasOwnProperty.call(this, cacheProp)) {\n return this[cacheProp];\n }\n\n if (!this.isSummary()) {\n summary = this.getFileCoverage().toSummary();\n } else {\n let count = 0;\n summary = coverage.createCoverageSummary();\n this.getChildren().forEach(child => {\n if (filesOnly && child.isSummary()) {\n return;\n }\n count += 1;\n summary.merge(child.getCoverageSummary(filesOnly));\n });\n if (count === 0 && filesOnly) {\n summary = null;\n }\n }\n this[cacheProp] = summary;\n return summary;\n }\n}\n\nclass ReportTree extends BaseTree {\n constructor(root, childPrefix) {\n super(root);\n\n const maybePrefix = node => {\n if (childPrefix && !node.isRoot()) {\n node.path.unshift(childPrefix);\n }\n };\n this.visit({\n onDetail: maybePrefix,\n onSummary(node) {\n maybePrefix(node);\n node.children.sort((a, b) => {\n const astr = a.path.toString();\n const bstr = b.path.toString();\n return astr < bstr\n ? -1\n : astr > bstr\n ? 1\n : /* istanbul ignore next */ 0;\n });\n }\n });\n }\n}\n\nfunction findCommonParent(paths) {\n return paths.reduce(\n (common, path) => common.commonPrefixPath(path),\n paths[0] || new Path([])\n );\n}\n\nfunction findOrCreateParent(parentPath, nodeMap, created = () => {}) {\n let parent = nodeMap[parentPath.toString()];\n\n if (!parent) {\n parent = new ReportNode(parentPath);\n nodeMap[parentPath.toString()] = parent;\n created(parentPath, parent);\n }\n\n return parent;\n}\n\nfunction toDirParents(list) {\n const nodeMap = Object.create(null);\n list.forEach(o => {\n const parent = findOrCreateParent(o.path.parent(), nodeMap);\n parent.addChild(new ReportNode(o.path, o.fileCoverage));\n });\n\n return Object.values(nodeMap);\n}\n\nfunction addAllPaths(topPaths, nodeMap, path, node) {\n const parent = findOrCreateParent(\n path.parent(),\n nodeMap,\n (parentPath, parent) => {\n if (parentPath.hasParent()) {\n addAllPaths(topPaths, nodeMap, parentPath, parent);\n } else {\n topPaths.push(parent);\n }\n }\n );\n\n parent.addChild(node);\n}\n\nfunction foldIntoOneDir(node, parent) {\n const { children } = node;\n if (children.length === 1 && !children[0].fileCoverage) {\n children[0].parent = parent;\n return foldIntoOneDir(children[0], parent);\n }\n node.children = children.map(child => foldIntoOneDir(child, node));\n return node;\n}\n\nfunction pkgSummaryPrefix(dirParents, commonParent) {\n if (!dirParents.some(dp => dp.path.length === 0)) {\n return;\n }\n\n if (commonParent.length === 0) {\n return 'root';\n }\n\n return commonParent.name();\n}\n\nclass SummarizerFactory {\n constructor(coverageMap, defaultSummarizer = 'pkg') {\n this._coverageMap = coverageMap;\n this._defaultSummarizer = defaultSummarizer;\n this._initialList = coverageMap.files().map(filePath => ({\n filePath,\n path: new Path(filePath),\n fileCoverage: coverageMap.fileCoverageFor(filePath)\n }));\n this._commonParent = findCommonParent(\n this._initialList.map(o => o.path.parent())\n );\n if (this._commonParent.length > 0) {\n this._initialList.forEach(o => {\n o.path.splice(0, this._commonParent.length);\n });\n }\n }\n\n get defaultSummarizer() {\n return this[this._defaultSummarizer];\n }\n\n get flat() {\n if (!this._flat) {\n this._flat = new ReportTree(\n ReportNode.createRoot(\n this._initialList.map(\n node => new ReportNode(node.path, node.fileCoverage)\n )\n )\n );\n }\n\n return this._flat;\n }\n\n _createPkg() {\n const dirParents = toDirParents(this._initialList);\n if (dirParents.length === 1) {\n return new ReportTree(dirParents[0]);\n }\n\n return new ReportTree(\n ReportNode.createRoot(dirParents),\n pkgSummaryPrefix(dirParents, this._commonParent)\n );\n }\n\n get pkg() {\n if (!this._pkg) {\n this._pkg = this._createPkg();\n }\n\n return this._pkg;\n }\n\n _createNested() {\n const nodeMap = Object.create(null);\n const topPaths = [];\n this._initialList.forEach(o => {\n const node = new ReportNode(o.path, o.fileCoverage);\n addAllPaths(topPaths, nodeMap, o.path, node);\n });\n\n const topNodes = topPaths.map(node => foldIntoOneDir(node));\n if (topNodes.length === 1) {\n return new ReportTree(topNodes[0]);\n }\n\n return new ReportTree(ReportNode.createRoot(topNodes));\n }\n\n get nested() {\n if (!this._nested) {\n this._nested = this._createNested();\n }\n\n return this._nested;\n }\n}\n\nmodule.exports = SummarizerFactory;\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst fs = require('fs');\nconst FileWriter = require('./file-writer');\nconst XMLWriter = require('./xml-writer');\nconst tree = require('./tree');\nconst watermarks = require('./watermarks');\nconst SummarizerFactory = require('./summarizer-factory');\n\nfunction defaultSourceLookup(path) {\n try {\n return fs.readFileSync(path, 'utf8');\n } catch (ex) {\n throw new Error(`Unable to lookup source: ${path} (${ex.message})`);\n }\n}\n\nfunction normalizeWatermarks(specified = {}) {\n Object.entries(watermarks.getDefault()).forEach(([k, value]) => {\n const specValue = specified[k];\n if (!Array.isArray(specValue) || specValue.length !== 2) {\n specified[k] = value;\n }\n });\n\n return specified;\n}\n\n/**\n * A reporting context that is passed to report implementations\n * @param {Object} [opts=null] opts options\n * @param {String} [opts.dir='coverage'] opts.dir the reporting directory\n * @param {Object} [opts.watermarks=null] opts.watermarks watermarks for\n * statements, lines, branches and functions\n * @param {Function} [opts.sourceFinder=fsLookup] opts.sourceFinder a\n * function that returns source code given a file path. Defaults to\n * filesystem lookups based on path.\n * @constructor\n */\nclass Context {\n constructor(opts) {\n this.dir = opts.dir || 'coverage';\n this.watermarks = normalizeWatermarks(opts.watermarks);\n this.sourceFinder = opts.sourceFinder || defaultSourceLookup;\n this._summarizerFactory = new SummarizerFactory(\n opts.coverageMap,\n opts.defaultSummarizer\n );\n this.data = {};\n }\n\n /**\n * returns a FileWriter implementation for reporting use. Also available\n * as the `writer` property on the context.\n * @returns {Writer}\n */\n getWriter() {\n return this.writer;\n }\n\n /**\n * returns the source code for the specified file path or throws if\n * the source could not be found.\n * @param {String} filePath the file path as found in a file coverage object\n * @returns {String} the source code\n */\n getSource(filePath) {\n return this.sourceFinder(filePath);\n }\n\n /**\n * returns the coverage class given a coverage\n * types and a percentage value.\n * @param {String} type - the coverage type, one of `statements`, `functions`,\n * `branches`, or `lines`\n * @param {Number} value - the percentage value\n * @returns {String} one of `high`, `medium` or `low`\n */\n classForPercent(type, value) {\n const watermarks = this.watermarks[type];\n if (!watermarks) {\n return 'unknown';\n }\n if (value < watermarks[0]) {\n return 'low';\n }\n if (value >= watermarks[1]) {\n return 'high';\n }\n return 'medium';\n }\n\n /**\n * returns an XML writer for the supplied content writer\n * @param {ContentWriter} contentWriter the content writer to which the returned XML writer\n * writes data\n * @returns {XMLWriter}\n */\n getXMLWriter(contentWriter) {\n return new XMLWriter(contentWriter);\n }\n\n /**\n * returns a full visitor given a partial one.\n * @param {Object} partialVisitor a partial visitor only having the functions of\n * interest to the caller. These functions are called with a scope that is the\n * supplied object.\n * @returns {Visitor}\n */\n getVisitor(partialVisitor) {\n return new tree.Visitor(partialVisitor);\n }\n\n getTree(name = 'defaultSummarizer') {\n return this._summarizerFactory[name];\n }\n}\n\nObject.defineProperty(Context.prototype, 'writer', {\n enumerable: true,\n get() {\n if (!this.data.writer) {\n this.data.writer = new FileWriter(this.dir);\n }\n return this.data.writer;\n }\n});\n\nmodule.exports = Context;\n", "'use strict';\n\n// TODO: switch to class private field when targetting node.js 12\nconst _summarizer = Symbol('ReportBase.#summarizer');\n\nclass ReportBase {\n constructor(opts = {}) {\n this[_summarizer] = opts.summarizer;\n }\n\n execute(context) {\n context.getTree(this[_summarizer]).visit(this, context);\n }\n}\n\nmodule.exports = ReportBase;\n", "/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\n/**\n * @module Exports\n */\n\nconst Context = require('./lib/context');\nconst watermarks = require('./lib/watermarks');\nconst ReportBase = require('./lib/report-base');\n\nmodule.exports = {\n /**\n * returns a reporting context for the supplied options\n * @param {Object} [opts=null] opts\n * @returns {Context}\n */\n createContext(opts) {\n return new Context(opts);\n },\n\n /**\n * returns the default watermarks that would be used when not\n * overridden\n * @returns {Object} an object with `statements`, `functions`, `branches`,\n * and `line` keys. Each value is a 2 element array that has the low and\n * high watermark as percentages.\n */\n getDefaultWatermarks() {\n return watermarks.getDefault();\n },\n\n /**\n * Base class for all reports\n */\n ReportBase\n};\n", "'use strict';\n/*\n Copyright 2012-2015, Yahoo Inc.\n Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nconst path = require('path');\n\nmodule.exports = {\n create(name, cfg) {\n cfg = cfg || {};\n let Cons;\n try {\n Cons = require(path.join(__dirname, 'lib', name));\n } catch (e) {\n if (e.code !== 'MODULE_NOT_FOUND') {\n throw e;\n }\n\n Cons = require(name);\n }\n\n return new Cons(cfg);\n }\n};\n", "export type EnvInput = NodeJS.ProcessEnv | Record<string, unknown>;\n\nexport const safeEnv = (\n ...sources: EnvInput[]\n): Record<string, string | undefined> => {\n const normalizedEnv: Record<string, string | undefined> = {};\n for (const source of sources) {\n for (const [key, value] of Object.entries(source ?? {})) {\n if (value == null) {\n normalizedEnv[key] = undefined;\n } else {\n switch (typeof value) {\n case \"string\":\n normalizedEnv[key] = value;\n break;\n case \"boolean\":\n case \"number\":\n case \"bigint\":\n normalizedEnv[key] = String(value);\n break;\n default:\n break;\n }\n }\n }\n }\n return normalizedEnv;\n};\n", "class AbortError extends Error {\n constructor(message = 'The operation was aborted') {\n super(message);\n this.name = 'AbortError';\n }\n}\n\nexport { AbortError };\n", "class TimeoutError extends Error {\n constructor(message = 'The operation was timed out') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport { TimeoutError };\n", "import { AbortError } from '../error/AbortError.mjs';\n\nfunction delay(ms, { signal } = {}) {\n return new Promise((resolve, reject) => {\n const abortError = () => {\n reject(new AbortError());\n };\n const abortHandler = () => {\n clearTimeout(timeoutId);\n abortError();\n };\n if (signal?.aborted) {\n return abortError();\n }\n const timeoutId = setTimeout(() => {\n signal?.removeEventListener('abort', abortHandler);\n resolve();\n }, ms);\n signal?.addEventListener('abort', abortHandler, { once: true });\n });\n}\n\nexport { delay };\n", "import { delay } from './delay.mjs';\nimport { TimeoutError } from '../error/TimeoutError.mjs';\n\nasync function timeout(ms) {\n await delay(ms);\n throw new TimeoutError();\n}\n\nexport { timeout };\n", "import { timeout } from './timeout.mjs';\n\nasync function withTimeout(run, ms) {\n return Promise.race([run(), timeout(ms)]);\n}\n\nexport { withTimeout };\n", "export { at } from './array/at.mjs';\nexport { chunk } from './array/chunk.mjs';\nexport { compact } from './array/compact.mjs';\nexport { countBy } from './array/countBy.mjs';\nexport { difference } from './array/difference.mjs';\nexport { differenceBy } from './array/differenceBy.mjs';\nexport { differenceWith } from './array/differenceWith.mjs';\nexport { drop } from './array/drop.mjs';\nexport { dropRight } from './array/dropRight.mjs';\nexport { dropRightWhile } from './array/dropRightWhile.mjs';\nexport { dropWhile } from './array/dropWhile.mjs';\nexport { fill } from './array/fill.mjs';\nexport { flatMap } from './array/flatMap.mjs';\nexport { flatMapDeep } from './array/flatMapDeep.mjs';\nexport { flatten } from './array/flatten.mjs';\nexport { flattenDeep } from './array/flattenDeep.mjs';\nexport { forEachRight } from './array/forEachRight.mjs';\nexport { groupBy } from './array/groupBy.mjs';\nexport { head } from './array/head.mjs';\nexport { initial } from './array/initial.mjs';\nexport { intersection } from './array/intersection.mjs';\nexport { intersectionBy } from './array/intersectionBy.mjs';\nexport { intersectionWith } from './array/intersectionWith.mjs';\nexport { isSubset } from './array/isSubset.mjs';\nexport { isSubsetWith } from './array/isSubsetWith.mjs';\nexport { keyBy } from './array/keyBy.mjs';\nexport { last } from './array/last.mjs';\nexport { maxBy } from './array/maxBy.mjs';\nexport { minBy } from './array/minBy.mjs';\nexport { orderBy } from './array/orderBy.mjs';\nexport { partition } from './array/partition.mjs';\nexport { pull } from './array/pull.mjs';\nexport { pullAt } from './array/pullAt.mjs';\nexport { remove } from './array/remove.mjs';\nexport { sample } from './array/sample.mjs';\nexport { sampleSize } from './array/sampleSize.mjs';\nexport { shuffle } from './array/shuffle.mjs';\nexport { sortBy } from './array/sortBy.mjs';\nexport { tail } from './array/tail.mjs';\nexport { take } from './array/take.mjs';\nexport { takeRight } from './array/takeRight.mjs';\nexport { takeRightWhile } from './array/takeRightWhile.mjs';\nexport { takeWhile } from './array/takeWhile.mjs';\nexport { toFilled } from './array/toFilled.mjs';\nexport { union } from './array/union.mjs';\nexport { unionBy } from './array/unionBy.mjs';\nexport { unionWith } from './array/unionWith.mjs';\nexport { uniq } from './array/uniq.mjs';\nexport { uniqBy } from './array/uniqBy.mjs';\nexport { uniqWith } from './array/uniqWith.mjs';\nexport { unzip } from './array/unzip.mjs';\nexport { unzipWith } from './array/unzipWith.mjs';\nexport { windowed } from './array/windowed.mjs';\nexport { without } from './array/without.mjs';\nexport { xor } from './array/xor.mjs';\nexport { xorBy } from './array/xorBy.mjs';\nexport { xorWith } from './array/xorWith.mjs';\nexport { zip } from './array/zip.mjs';\nexport { zipObject } from './array/zipObject.mjs';\nexport { zipWith } from './array/zipWith.mjs';\nexport { AbortError } from './error/AbortError.mjs';\nexport { TimeoutError } from './error/TimeoutError.mjs';\nexport { after } from './function/after.mjs';\nexport { ary } from './function/ary.mjs';\nexport { asyncNoop } from './function/asyncNoop.mjs';\nexport { before } from './function/before.mjs';\nexport { curry } from './function/curry.mjs';\nexport { curryRight } from './function/curryRight.mjs';\nexport { debounce } from './function/debounce.mjs';\nexport { flow } from './function/flow.mjs';\nexport { flowRight } from './function/flowRight.mjs';\nexport { identity } from './function/identity.mjs';\nexport { memoize } from './function/memoize.mjs';\nexport { negate } from './function/negate.mjs';\nexport { noop } from './function/noop.mjs';\nexport { once } from './function/once.mjs';\nexport { partial } from './function/partial.mjs';\nexport { partialRight } from './function/partialRight.mjs';\nexport { rest } from './function/rest.mjs';\nexport { retry } from './function/retry.mjs';\nexport { spread } from './function/spread.mjs';\nexport { throttle } from './function/throttle.mjs';\nexport { unary } from './function/unary.mjs';\nexport { clamp } from './math/clamp.mjs';\nexport { inRange } from './math/inRange.mjs';\nexport { mean } from './math/mean.mjs';\nexport { meanBy } from './math/meanBy.mjs';\nexport { median } from './math/median.mjs';\nexport { medianBy } from './math/medianBy.mjs';\nexport { random } from './math/random.mjs';\nexport { randomInt } from './math/randomInt.mjs';\nexport { range } from './math/range.mjs';\nexport { rangeRight } from './math/rangeRight.mjs';\nexport { round } from './math/round.mjs';\nexport { sum } from './math/sum.mjs';\nexport { sumBy } from './math/sumBy.mjs';\nexport { clone } from './object/clone.mjs';\nexport { cloneDeep } from './object/cloneDeep.mjs';\nexport { cloneDeepWith } from './object/cloneDeepWith.mjs';\nexport { findKey } from './object/findKey.mjs';\nexport { flattenObject } from './object/flattenObject.mjs';\nexport { invert } from './object/invert.mjs';\nexport { mapKeys } from './object/mapKeys.mjs';\nexport { mapValues } from './object/mapValues.mjs';\nexport { merge } from './object/merge.mjs';\nexport { mergeWith } from './object/mergeWith.mjs';\nexport { omit } from './object/omit.mjs';\nexport { omitBy } from './object/omitBy.mjs';\nexport { pick } from './object/pick.mjs';\nexport { pickBy } from './object/pickBy.mjs';\nexport { toCamelCaseKeys } from './object/toCamelCaseKeys.mjs';\nexport { toMerged } from './object/toMerged.mjs';\nexport { toSnakeCaseKeys } from './object/toSnakeCaseKeys.mjs';\nexport { isArrayBuffer } from './predicate/isArrayBuffer.mjs';\nexport { isBlob } from './predicate/isBlob.mjs';\nexport { isBoolean } from './predicate/isBoolean.mjs';\nexport { isBrowser } from './predicate/isBrowser.mjs';\nexport { isBuffer } from './predicate/isBuffer.mjs';\nexport { isDate } from './predicate/isDate.mjs';\nexport { isEqual } from './predicate/isEqual.mjs';\nexport { isEqualWith } from './predicate/isEqualWith.mjs';\nexport { isError } from './predicate/isError.mjs';\nexport { isFile } from './predicate/isFile.mjs';\nexport { isFunction } from './predicate/isFunction.mjs';\nexport { isJSON } from './predicate/isJSON.mjs';\nexport { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.mjs';\nexport { isLength } from './predicate/isLength.mjs';\nexport { isMap } from './predicate/isMap.mjs';\nexport { isNil } from './predicate/isNil.mjs';\nexport { isNode } from './predicate/isNode.mjs';\nexport { isNotNil } from './predicate/isNotNil.mjs';\nexport { isNull } from './predicate/isNull.mjs';\nexport { isPlainObject } from './predicate/isPlainObject.mjs';\nexport { isPrimitive } from './predicate/isPrimitive.mjs';\nexport { isPromise } from './predicate/isPromise.mjs';\nexport { isRegExp } from './predicate/isRegExp.mjs';\nexport { isSet } from './predicate/isSet.mjs';\nexport { isString } from './predicate/isString.mjs';\nexport { isSymbol } from './predicate/isSymbol.mjs';\nexport { isTypedArray } from './predicate/isTypedArray.mjs';\nexport { isUndefined } from './predicate/isUndefined.mjs';\nexport { isWeakMap } from './predicate/isWeakMap.mjs';\nexport { isWeakSet } from './predicate/isWeakSet.mjs';\nexport { delay } from './promise/delay.mjs';\nexport { Mutex } from './promise/mutex.mjs';\nexport { Semaphore } from './promise/semaphore.mjs';\nexport { timeout } from './promise/timeout.mjs';\nexport { withTimeout } from './promise/withTimeout.mjs';\nexport { camelCase } from './string/camelCase.mjs';\nexport { capitalize } from './string/capitalize.mjs';\nexport { constantCase } from './string/constantCase.mjs';\nexport { deburr } from './string/deburr.mjs';\nexport { escape } from './string/escape.mjs';\nexport { escapeRegExp } from './string/escapeRegExp.mjs';\nexport { kebabCase } from './string/kebabCase.mjs';\nexport { lowerCase } from './string/lowerCase.mjs';\nexport { lowerFirst } from './string/lowerFirst.mjs';\nexport { pad } from './string/pad.mjs';\nexport { pascalCase } from './string/pascalCase.mjs';\nexport { reverseString } from './string/reverseString.mjs';\nexport { snakeCase } from './string/snakeCase.mjs';\nexport { startCase } from './string/startCase.mjs';\nexport { trim } from './string/trim.mjs';\nexport { trimEnd } from './string/trimEnd.mjs';\nexport { trimStart } from './string/trimStart.mjs';\nexport { unescape } from './string/unescape.mjs';\nexport { upperCase } from './string/upperCase.mjs';\nexport { upperFirst } from './string/upperFirst.mjs';\nexport { words } from './string/words.mjs';\nexport { attempt } from './util/attempt.mjs';\nexport { attemptAsync } from './util/attemptAsync.mjs';\nexport { invariant as assert, invariant } from './util/invariant.mjs';\n", "import { spawn } from \"node:child_process\";\nimport * as os from \"node:os\";\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { withTimeout, TimeoutError } from \"es-toolkit\";\n\nexport type RunTextOptions = {\n readonly cwd?: string;\n readonly env?: NodeJS.ProcessEnv;\n readonly timeoutMs?: number;\n};\n\nexport const runText = async (\n cmd: string,\n args: readonly string[],\n opts: RunTextOptions = {}\n): Promise<string> => {\n const child = spawn(cmd, [...args], {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: false,\n windowsHide: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout?.on(\"data\", (chunk) => {\n stdout += String(chunk);\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += String(chunk);\n });\n\n const exec = new Promise<string>((resolve, reject) => {\n child.on(\"error\", reject);\n child.on(\"close\", (code) =>\n Number(code) === 0\n ? resolve(stdout)\n : reject(new Error(stderr || `exit ${code}`))\n );\n });\n\n try {\n return await (opts.timeoutMs\n ? withTimeout(() => exec, opts.timeoutMs)\n : exec);\n } catch (caughtError) {\n try {\n if (os.platform() === \"win32\") {\n child.kill();\n } else if (typeof child.pid === \"number\") {\n child.kill(\"SIGKILL\");\n }\n } catch {}\n if (caughtError instanceof TimeoutError) {\n throw new Error(`${cmd} timed out`);\n }\n throw caughtError;\n }\n};\n\nexport const runExitCode = async (\n cmd: string,\n args: readonly string[],\n opts: Omit<RunTextOptions, \"timeoutMs\"> = {}\n): Promise<number> =>\n new Promise<number>((resolve, reject) => {\n const child = spawn(cmd, [...args], {\n cwd: opts.cwd,\n env: opts.env,\n stdio: \"inherit\",\n shell: false,\n windowsHide: true,\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => resolve(Number(code)));\n });\n\nexport const runWithCapture = async (\n cmd: string,\n args: readonly string[],\n opts: { readonly cwd?: string; readonly env?: NodeJS.ProcessEnv }\n) =>\n new Promise<{ code: number; output: string }>((resolve, reject) => {\n const child = spawn(cmd, [...args], {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: false,\n windowsHide: true,\n });\n let buf = \"\";\n child.stdout?.on(\"data\", (chunk) => {\n buf += String(chunk);\n });\n child.stderr?.on(\"data\", (chunk) => {\n buf += String(chunk);\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => resolve({ code: Number(code), output: buf }));\n });\n", "import * as path from 'node:path';\n\nexport type Action =\n | { readonly type: 'coverage'; readonly coverageValue: boolean }\n | { readonly type: 'coverageUi'; readonly value: 'jest' | 'both' }\n | { readonly type: 'coverageAbortOnFailure'; readonly value: boolean }\n | { readonly type: 'jestArg'; readonly value: string }\n | { readonly type: 'jestArgs'; readonly values: readonly string[] }\n | { readonly type: 'vitestArg'; readonly value: string }\n | { readonly type: 'bothArg'; readonly value: string }\n | { readonly type: 'selectionHint' }\n | { readonly type: 'coverageInclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageExclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageEditor'; readonly value: string }\n | { readonly type: 'coverageRoot'; readonly value: string }\n | { readonly type: 'selectionPath'; readonly value: string }\n | { readonly type: 'coverageDetail'; readonly value?: number | 'all' }\n | { readonly type: 'coverageShowCode'; readonly value: boolean }\n | { readonly type: 'coverageMode'; readonly value: 'compact' | 'full' }\n | { readonly type: 'coverageMaxFiles'; readonly value: number }\n | { readonly type: 'coverageMaxHotspots'; readonly value: number }\n | { readonly type: 'coveragePageFit'; readonly value: boolean };\n\nexport const ActionBuilders = {\n coverage: (coverageValue: boolean): Action => ({ type: 'coverage', coverageValue }),\n coverageUi: (value: 'jest' | 'both'): Action => ({ type: 'coverageUi', value }),\n coverageAbortOnFailure: (value: boolean): Action => ({ type: 'coverageAbortOnFailure', value }),\n jestArg: (value: string): Action => ({ type: 'jestArg', value }),\n jestArgs: (values: readonly string[]): Action => ({ type: 'jestArgs', values }),\n vitestArg: (value: string): Action => ({ type: 'vitestArg', value }),\n bothArg: (value: string): Action => ({ type: 'bothArg', value }),\n selectionHint: (): Action => ({ type: 'selectionHint' }),\n coverageInclude: (values: readonly string[]): Action => ({ type: 'coverageInclude', values }),\n coverageExclude: (values: readonly string[]): Action => ({ type: 'coverageExclude', values }),\n coverageEditor: (value: string): Action => ({ type: 'coverageEditor', value }),\n coverageRoot: (value: string): Action => ({ type: 'coverageRoot', value }),\n selectionPath: (value: string): Action => ({ type: 'selectionPath', value }),\n coverageDetail: (value?: number | 'all'): Action =>\n value !== undefined ? { type: 'coverageDetail', value } : { type: 'coverageDetail' },\n coverageShowCode: (value: boolean): Action => ({ type: 'coverageShowCode', value }),\n coverageMode: (value: 'compact' | 'full'): Action => ({ type: 'coverageMode', value }),\n coverageMaxFiles: (value: number): Action => ({ type: 'coverageMaxFiles', value }),\n coverageMaxHotspots: (value: number): Action => ({ type: 'coverageMaxHotspots', value }),\n coveragePageFit: (value: boolean): Action => ({ type: 'coveragePageFit', value }),\n} as const;\n\ntype State = { actions: Action[]; skipNext: boolean };\nexport type Step = readonly [readonly Action[], boolean];\nexport type RuleEnv = { readonly lookahead?: string; readonly jestFlags: ReadonlySet<string> };\ntype Opt<T> = { readonly _tag: 'some'; readonly value: T } | { readonly _tag: 'none' };\nconst Some = <T>(value: T): Opt<T> => ({ _tag: 'some', value });\nconst None: Opt<never> = { _tag: 'none' } as const;\nconst isSome = <T>(opt: Opt<T>): opt is { readonly _tag: 'some'; readonly value: T } =>\n opt._tag === 'some';\n\nconst step = (actions: readonly Action[], skipNext: boolean = false): Step =>\n [actions, skipNext] as const;\n\nexport type Rule = (value: string, env: RuleEnv) => Opt<Step>;\nexport const rule = {\n when:\n (\n predicate: (value: string, env: RuleEnv) => boolean,\n build: (value: string, env: RuleEnv) => Step,\n ): Rule =>\n (value, env) =>\n predicate(value, env) ? Some(build(value, env)) : None,\n eq: (flag: string, build: () => Step): Rule =>\n rule.when(\n (value) => value === flag,\n () => build(),\n ),\n startsWith: (prefix: string, build: (value: string) => Step): Rule =>\n rule.when(\n (value) => value.startsWith(prefix),\n (value) => build(value),\n ),\n inSet: (select: (env: RuleEnv) => ReadonlySet<string>, build: (value: string) => Step): Rule =>\n rule.when(\n (value, env) => select(env).has(value),\n (value) => build(value),\n ),\n withLookahead: (\n lookaheadFlag: string,\n build: (flagToken: string, lookahead: string) => Step,\n ): Rule =>\n rule.when(\n (value, env) =>\n value === lookaheadFlag && typeof env.lookahead === 'string' && env.lookahead.length > 0,\n (value, env) => build(value, env.lookahead!),\n ),\n} as const;\n\nconst STRING_EMPTY = '' as const;\nconst STRING_TRUE = 'true' as const;\nconst STRING_ONE = '1' as const;\nconst INDEX_STEP = 1 as const;\n\nexport const isTruthy = (value: string): boolean =>\n value === STRING_TRUE || value === STRING_ONE || value === STRING_EMPTY;\n\nexport const parseActionsFromTokens = (tokens: readonly string[]): readonly Action[] => {\n const jestOnlyFlags = new Set(['--ci', '--detectOpenHandles', '--forceExit', '--runInBand']);\n\n const parseCoverageUiString = (raw: string): 'jest' | 'both' => {\n const normalized = String(raw).toLowerCase();\n return normalized === 'jest' ? 'jest' : 'both';\n };\n\n const rules: readonly Rule[] = [\n // --coverage (enable), and --coverage=true/false\n rule.eq('--coverage', () => step([ActionBuilders.coverage(true)])),\n rule.startsWith('--coverage=', (value) =>\n step([ActionBuilders.coverage(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()))]),\n ),\n // --coverage.abortOnFailure\n rule.eq('--coverage.abortOnFailure', () => step([ActionBuilders.coverageAbortOnFailure(true)])),\n rule.startsWith('--coverage.abortOnFailure=', (value) =>\n step([\n ActionBuilders.coverageAbortOnFailure(\n isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.abortOnFailure', (_flag, lookahead) =>\n step([ActionBuilders.coverageAbortOnFailure(isTruthy(String(lookahead)))], true),\n ),\n rule.startsWith('--coverage-ui=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.startsWith('--coverageUi=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.withLookahead('--coverage-ui', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n rule.withLookahead('--coverageUi', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n\n rule.eq('--coverage.detail', () => step([ActionBuilders.coverageDetail()])),\n rule.startsWith('--coverage.detail=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)]);\n }),\n rule.withLookahead('--coverage.detail', (_flag, lookahead) => {\n const raw = String(lookahead).trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)], true);\n }),\n\n rule.eq('--coverage.showCode', () => step([ActionBuilders.coverageShowCode(true)])),\n rule.startsWith('--coverage.showCode=', (value) => {\n const flagValue = (value.split('=')[1] ?? '').trim().toLowerCase();\n return step([\n ActionBuilders.coverageShowCode(\n flagValue === 'true' || flagValue === '1' || flagValue === '',\n ),\n ]);\n }),\n rule.withLookahead('--coverage.showCode', (_flag, lookahead) =>\n step([ActionBuilders.coverageShowCode(isTruthy(String(lookahead)))], true),\n ),\n\n rule.startsWith('--coverage.mode=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const mode = raw === 'compact' ? 'compact' : 'full';\n return step([ActionBuilders.coverageMode(mode)]);\n }),\n rule.withLookahead('--coverage.mode', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageMode(\n String(lookahead).trim().toLowerCase() === 'compact' ? 'compact' : 'full',\n ),\n ],\n true,\n ),\n ),\n rule.eq('--coverage.compact', () => step([ActionBuilders.coverageMode('compact')])),\n\n rule.startsWith('--coverage.maxFiles=', (value) => {\n const maxFilesCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxFilesCount) ? [ActionBuilders.coverageMaxFiles(maxFilesCount)] : [],\n );\n }),\n rule.startsWith('--coverage.maxHotspots=', (value) => {\n const maxHotspotsCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxHotspotsCount)\n ? [ActionBuilders.coverageMaxHotspots(maxHotspotsCount)]\n : [],\n );\n }),\n rule.eq('--coverage.pageFit', () => step([ActionBuilders.coveragePageFit(true)])),\n rule.startsWith('--coverage.pageFit=', (value) =>\n step([\n ActionBuilders.coveragePageFit(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase())),\n ]),\n ),\n rule.withLookahead('--coverage.pageFit', (_flag, lookahead) =>\n step([ActionBuilders.coveragePageFit(isTruthy(String(lookahead)))], true),\n ),\n\n rule.withLookahead('--testPathPattern', (flag, lookahead) =>\n step([ActionBuilders.jestArgs([flag, lookahead])], true),\n ),\n rule.startsWith('--testPathPattern=', (value) => step([ActionBuilders.jestArg(value)])),\n rule.inSet(\n (env) => env.jestFlags,\n (value) => step([ActionBuilders.jestArg(value)]),\n ),\n\n rule.when(\n (value) => value === '--watch' || value === '-w',\n () => step([ActionBuilders.vitestArg('--watch'), ActionBuilders.jestArg('--watch')]),\n ),\n rule.eq('--watchAll', () => step([ActionBuilders.jestArg('--watchAll')])),\n\n rule.startsWith('--coverage.include=', (value) =>\n step([\n ActionBuilders.coverageInclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.include', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageInclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.exclude=', (value) =>\n step([\n ActionBuilders.coverageExclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.exclude', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageExclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.editor=', (value) =>\n step([ActionBuilders.coverageEditor((value.split('=')[1] ?? '').trim())]),\n ),\n rule.startsWith('--coverage.root=', (value) =>\n step([ActionBuilders.coverageRoot((value.split('=')[1] ?? '').trim())]),\n ),\n\n rule.withLookahead('-t', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n rule.withLookahead('--testNamePattern', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n ] as const;\n\n const init: State = { actions: [], skipNext: false };\n\n const final = tokens.reduce<State>((state, token, index) => {\n if (state.skipNext) {\n return { actions: state.actions, skipNext: false };\n }\n const tokenValue = token ?? STRING_EMPTY;\n const nextToken = tokens[index + INDEX_STEP];\n let env: RuleEnv = { jestFlags: jestOnlyFlags };\n if (typeof nextToken === 'string' && nextToken.length > 0) {\n env = { jestFlags: jestOnlyFlags, lookahead: nextToken };\n }\n\n const firstMatch = (rs: readonly Rule[], value: string, envForRules: RuleEnv) => {\n for (const ruleFn of rs) {\n const match = ruleFn(value, envForRules);\n if (isSome(match)) {\n return match;\n }\n }\n return None as Opt<Step>;\n };\n\n const matched = firstMatch(rules, tokenValue, env);\n\n const isTestFileToken = (candidate: string) =>\n /\\.(test|spec)\\.[tj]sx?$/.test(candidate) || /(^|\\/)tests?\\//.test(candidate);\n const isPathLike = (candidate: string) =>\n /[\\\\/]/.test(candidate) || /\\.(m?[tj]sx?)$/i.test(candidate);\n\n const [matchedActions, shouldSkipNext] = isSome(matched)\n ? matched.value\n : (() => {\n const base = [ActionBuilders.bothArg(tokenValue)];\n const withSelection =\n isTestFileToken(tokenValue) || isPathLike(tokenValue)\n ? [\n ...base,\n ActionBuilders.selectionHint(),\n ...(isPathLike(tokenValue) ? [ActionBuilders.selectionPath(tokenValue)] : []),\n ]\n : base;\n return step(withSelection);\n })();\n\n return { actions: [...state.actions, ...matchedActions], skipNext: shouldSkipNext };\n }, init);\n\n return final.actions as readonly Action[];\n};\n\nexport type ParsedArgs = {\n readonly vitestArgs: readonly string[];\n readonly jestArgs: readonly string[];\n readonly collectCoverage: boolean;\n readonly coverageUi: 'jest' | 'both';\n readonly coverageAbortOnFailure: boolean;\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode: boolean;\n readonly coverageMode: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit: boolean;\n};\n\ntype Contrib = {\n readonly vitest: readonly string[];\n readonly jest: readonly string[];\n readonly coverage: boolean;\n readonly coverageUi?: ParsedArgs['coverageUi'];\n readonly coverageAbortOnFailure?: boolean;\n readonly selection?: boolean;\n readonly include?: readonly string[];\n readonly exclude?: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly selectionPaths?: readonly string[];\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n};\n\nconst emptyContrib: Contrib = {\n vitest: [],\n jest: [],\n coverage: false,\n coverageDetail: 'auto',\n coverageMode: 'auto',\n};\n\nconst toContrib = (action: Action): Contrib => {\n switch (action.type) {\n case 'coverage':\n return { vitest: [], jest: [], coverage: action.coverageValue };\n case 'coverageUi':\n return { vitest: [], jest: [], coverage: false, coverageUi: action.value };\n case 'coverageAbortOnFailure':\n return { vitest: [], jest: [], coverage: false, coverageAbortOnFailure: action.value };\n case 'jestArgs':\n return { vitest: [], jest: action.values, coverage: false };\n case 'selectionHint':\n return { vitest: [], jest: [], coverage: false, selection: true };\n case 'coverageInclude':\n return { vitest: [], jest: [], coverage: false, include: action.values };\n case 'coverageExclude':\n return { vitest: [], jest: [], coverage: false, exclude: action.values };\n case 'coverageEditor':\n return { vitest: [], jest: [], coverage: false, editorCmd: action.value };\n case 'coverageRoot':\n return { vitest: [], jest: [], coverage: false, workspaceRoot: action.value };\n case 'selectionPath':\n return { vitest: [], jest: [], coverage: false, selectionPaths: [action.value] };\n case 'coverageDetail': {\n const detailValue: Contrib['coverageDetail'] = action.value ?? 'auto';\n return { vitest: [], jest: [], coverage: false, coverageDetail: detailValue };\n }\n case 'coverageShowCode':\n return { vitest: [], jest: [], coverage: false, coverageShowCode: action.value };\n case 'coverageMode':\n return { vitest: [], jest: [], coverage: false, coverageMode: action.value };\n case 'coverageMaxFiles':\n return { vitest: [], jest: [], coverage: false, coverageMaxFiles: action.value };\n case 'coverageMaxHotspots':\n return { vitest: [], jest: [], coverage: false, coverageMaxHotspots: action.value };\n case 'coveragePageFit':\n return { vitest: [], jest: [], coverage: false, coveragePageFit: action.value };\n case 'jestArg':\n return { vitest: [], jest: [action.value], coverage: false };\n case 'vitestArg':\n return { vitest: [action.value], jest: [], coverage: false };\n case 'bothArg':\n return { vitest: [action.value], jest: [action.value], coverage: false };\n default: {\n const neverGuard: never = action;\n return neverGuard;\n }\n }\n};\n\nexport const combineContrib = (left: Contrib, right: Contrib): Contrib => {\n const base: Contrib = {\n vitest: left.vitest.concat(right.vitest),\n jest: left.jest.concat(right.jest),\n coverage: left.coverage || right.coverage,\n include: [...(left.include ?? []), ...(right.include ?? [])],\n exclude: [...(left.exclude ?? []), ...(right.exclude ?? [])],\n selection: Boolean(left.selection || right.selection),\n selectionPaths: [...(left.selectionPaths ?? []), ...(right.selectionPaths ?? [])],\n };\n const next: Contrib = { ...base } as Contrib;\n const editor = right.editorCmd ?? left.editorCmd;\n if (editor !== undefined) {\n (next as unknown as { editorCmd: string }).editorCmd = editor;\n }\n const root = right.workspaceRoot ?? left.workspaceRoot;\n if (root !== undefined) {\n (next as unknown as { workspaceRoot: string }).workspaceRoot = root;\n }\n if (right.coverageUi !== undefined) {\n return { ...next, coverageUi: right.coverageUi } as Contrib;\n }\n if (left.coverageUi !== undefined) {\n return { ...next, coverageUi: left.coverageUi } as Contrib;\n }\n return {\n ...next,\n ...(right.coverageAbortOnFailure !== undefined || left.coverageAbortOnFailure !== undefined\n ? { coverageAbortOnFailure: right.coverageAbortOnFailure ?? left.coverageAbortOnFailure }\n : {}),\n ...(right.coverageDetail !== undefined || left.coverageDetail !== undefined\n ? { coverageDetail: right.coverageDetail ?? left.coverageDetail }\n : {}),\n ...(right.coverageShowCode !== undefined || left.coverageShowCode !== undefined\n ? { coverageShowCode: right.coverageShowCode ?? left.coverageShowCode }\n : {}),\n ...(right.coverageMode !== undefined || left.coverageMode !== undefined\n ? { coverageMode: right.coverageMode ?? left.coverageMode }\n : {}),\n ...(right.coverageMaxFiles !== undefined || left.coverageMaxFiles !== undefined\n ? { coverageMaxFiles: right.coverageMaxFiles ?? left.coverageMaxFiles }\n : {}),\n ...(right.coverageMaxHotspots !== undefined || left.coverageMaxHotspots !== undefined\n ? { coverageMaxHotspots: right.coverageMaxHotspots ?? left.coverageMaxHotspots }\n : {}),\n ...(right.coveragePageFit !== undefined || left.coveragePageFit !== undefined\n ? { coveragePageFit: right.coveragePageFit ?? left.coveragePageFit }\n : {}),\n } as Contrib;\n};\n\nexport const DEFAULT_INCLUDE = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'] as const;\nexport const DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/coverage/**',\n '**/dist/**',\n '**/build/**',\n '**/migrations/**',\n '**/__mocks__/**',\n] as const;\n\nexport const deriveArgs = (argv: readonly string[]): ParsedArgs => {\n const vitestArgs: string[] = ['run'];\n const jestArgs: string[] = ['--detectOpenHandles', '--forceExit', '--runInBand'];\n let collectCoverage = false;\n let coverageUi: ParsedArgs['coverageUi'] = 'both';\n let coverageAbortOnFailure = false;\n let coverageShowCode = Boolean(process.stdout.isTTY);\n let coverageMode: ParsedArgs['coverageMode'] = 'auto';\n const coverageMaxFilesLocalInit: number | undefined = undefined;\n const coverageMaxHotspotsLocalInit: number | undefined = undefined;\n let coverageMaxFilesLocal: number | undefined = coverageMaxFilesLocalInit;\n let coverageMaxHotspotsLocal: number | undefined = coverageMaxHotspotsLocalInit;\n let coveragePageFit = Boolean(process.stdout.isTTY);\n\n const uiEnv = (process.env.COVERAGE_UI ?? '').toLowerCase();\n if (uiEnv === 'both' || uiEnv === 'jest') {\n coverageUi = uiEnv as ParsedArgs['coverageUi'];\n }\n\n const contrib = parseActionsFromTokens(argv).map(toContrib).reduce(combineContrib, emptyContrib);\n vitestArgs.push(...contrib.vitest);\n jestArgs.push(...contrib.jest);\n collectCoverage ||= contrib.coverage;\n coverageUi = contrib.coverageUi ?? coverageUi;\n coverageAbortOnFailure = contrib.coverageAbortOnFailure ?? coverageAbortOnFailure;\n coverageShowCode = contrib.coverageShowCode ?? coverageShowCode;\n const coverageDetailComputed: ParsedArgs['coverageDetail'] | undefined =\n contrib.coverageDetail ?? (contrib.selection ? 'auto' : undefined);\n coverageMode = contrib.coverageMode ?? (contrib.selection ? 'compact' : 'auto');\n coverageMaxFilesLocal = contrib.coverageMaxFiles ?? coverageMaxFilesLocal;\n coverageMaxHotspotsLocal = contrib.coverageMaxHotspots ?? coverageMaxHotspotsLocal;\n coveragePageFit = contrib.coveragePageFit ?? coveragePageFit;\n\n if (collectCoverage) {\n jestArgs.push(\n '--coverage',\n '--coverageProvider=babel',\n '--coverageReporters=lcov',\n '--coverageReporters=json',\n '--coverageReporters=text-summary',\n '--coverageDirectory=coverage/jest',\n );\n }\n\n const selectionLooksLikeTestPath = (contrib.selectionPaths ?? []).some(\n (selectionPath) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(selectionPath) || /(^|\\/)tests?\\//i.test(selectionPath),\n );\n const inferredFromSelection = (contrib.selectionPaths ?? [])\n .map((pathToken) => {\n const normalized = path.normalize(pathToken).replace(/\\\\/g, '/');\n const isDir = !/\\.(m?[tj]sx?)$/i.test(normalized);\n const base = isDir\n ? normalized.replace(/\\/+$/, '')\n : path.dirname(normalized).replace(/\\\\/g, '/');\n return base.length ? `${base}/**/*` : '**/*';\n })\n .filter((glob, index, arr) => arr.indexOf(glob) === index);\n\n const includeGlobs = (contrib.include ?? []).length\n ? (contrib.include as string[])\n : selectionLooksLikeTestPath\n ? [...DEFAULT_INCLUDE]\n : inferredFromSelection.length\n ? inferredFromSelection\n : [...DEFAULT_INCLUDE];\n const excludeGlobs = (contrib.exclude ?? []).length\n ? (contrib.exclude as string[])\n : [...DEFAULT_EXCLUDE];\n\n const out: ParsedArgs = {\n vitestArgs,\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified: Boolean(contrib.selection),\n selectionPaths: [...(contrib.selectionPaths ?? [])],\n includeGlobs,\n excludeGlobs,\n coverageShowCode,\n ...(coverageDetailComputed !== undefined ? { coverageDetail: coverageDetailComputed } : {}),\n coverageMode,\n ...(coverageMaxFilesLocal !== undefined ? { coverageMaxFiles: coverageMaxFilesLocal } : {}),\n ...(coverageMaxHotspotsLocal !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsLocal }\n : {}),\n coveragePageFit,\n ...(contrib.editorCmd !== undefined ? { editorCmd: contrib.editorCmd } : {}),\n ...(contrib.workspaceRoot !== undefined ? { workspaceRoot: contrib.workspaceRoot } : {}),\n };\n return out;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\n\nconst TailSegmentCount = 2 as const;\nconst EmptyCount = 0 as const;\nconst JsonIndentSpaces = 2 as const;\n\nexport const DEFAULT_TEST_GLOBS = [\n \"**/*.{test,spec}.{ts,tsx,js,jsx}\",\n \"tests/**/*.{ts,tsx,js,jsx}\",\n] as const;\n\nexport type FindRelatedOpts = {\n readonly repoRoot: string;\n readonly productionPaths: readonly string[];\n readonly testGlobs?: readonly string[];\n readonly excludeGlobs?: readonly string[];\n readonly timeoutMs?: number;\n};\n\nexport const findRelatedTestsFast = async (\n opts: FindRelatedOpts\n): Promise<readonly string[]> => {\n const repoRoot = path.resolve(opts.repoRoot);\n const testGlobs = opts.testGlobs ?? DEFAULT_TEST_GLOBS;\n const excludeGlobs = opts.excludeGlobs ?? [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/.next/**\",\n ];\n\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRoot, abs).replace(/\\\\/g, \"/\");\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, \"\");\n const base = path.basename(withoutExt);\n const segs = withoutExt.split(\"/\");\n const tail2 = segs.slice(-TailSegmentCount).join(\"/\");\n const uniq = Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));\n return uniq;\n };\n\n const seeds = Array.from(\n new Set(\n opts.productionPaths\n .map((productionPath) => path.resolve(productionPath))\n .flatMap(toSeeds)\n )\n );\n if (seeds.length === EmptyCount) {\n return [] as string[];\n }\n\n try {\n const rgVersion = await runText(\"rg\", [\"--version\"], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n });\n if (!rgVersion) {\n return [] as string[];\n }\n } catch {\n return [] as string[];\n }\n\n const args: string[] = [\"-n\", \"-l\", \"-S\", \"-F\"];\n testGlobs.forEach((globPattern) => args.push(\"-g\", globPattern));\n excludeGlobs.forEach((excludeGlobPattern) =>\n args.push(\"-g\", `!${excludeGlobPattern}`)\n );\n seeds.forEach((seedToken) => args.push(\"-e\", seedToken));\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", [...args, repoRoot], {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n });\n } catch {\n raw = \"\";\n }\n\n const lines = raw\n .split(/\\r?\\n/)\n .map((lineText) => lineText.trim())\n .filter(Boolean);\n\n const looksLikeTest = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n\n const absolute = lines\n .map((relativePath) =>\n path.resolve(repoRoot, relativePath).replace(/\\\\/g, \"/\")\n )\n .filter(looksLikeTest);\n\n const uniq = Array.from(new Set(absolute));\n const results: string[] = [];\n await Promise.all(\n uniq.map(async (absolutePath) => {\n try {\n await fs.access(absolutePath);\n results.push(absolutePath);\n } catch {\n /* ignore */\n }\n })\n );\n return results;\n};\n\nexport const cachedRelated = async (opts: {\n readonly repoRoot: string;\n readonly selectionKey: string;\n readonly compute: () => Promise<readonly string[]>;\n}): Promise<readonly string[]> => {\n const cacheDir = path.join(opts.repoRoot, \".cache\");\n const cacheFile = path.join(cacheDir, \"relevant-tests.json\");\n\n let head = \"nogit\";\n try {\n const raw = await runText(\n \"git\",\n [\"-C\", opts.repoRoot, \"rev-parse\", \"--short\", \"HEAD\"],\n {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n }\n );\n head = raw.trim() || \"nogit\";\n } catch {\n head = \"nogit\";\n }\n\n const key = `${head}::${opts.selectionKey}`;\n\n let bag: Record<string, string[]> = {};\n try {\n const read = await fs.readFile(cacheFile, \"utf8\");\n bag = JSON.parse(read) as Record<string, string[]>;\n } catch {\n bag = {};\n }\n\n const hit = bag[key];\n if (hit?.length) {\n // Validate cached paths still exist on disk; if any are missing, recompute\n const existing: string[] = [];\n await Promise.all(\n hit.map(async (candidatePath) => {\n try {\n await fs.access(candidatePath);\n existing.push(candidatePath);\n } catch {\n // missing \u2192 ignore; will trigger recompute below\n }\n })\n );\n if (existing.length === hit.length) {\n return existing as readonly string[];\n }\n // One or more cached entries are stale; recompute and refresh cache\n const recomputed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(recomputed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(\n cacheFile,\n JSON.stringify(next, null, JsonIndentSpaces)\n );\n } catch {\n /* ignore cache write errors */\n }\n return recomputed as readonly string[];\n }\n\n const computed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(computed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(cacheFile, JSON.stringify(next, null, JsonIndentSpaces));\n } catch {\n /* ignore cache write errors */\n }\n return computed;\n};\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", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.exports.ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n isSpaceSeparator (c) {\n return typeof c === 'string' && unicode.Space_Separator.test(c)\n },\n\n isIdStartChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c === '$') || (c === '_') ||\n unicode.ID_Start.test(c)\n )\n },\n\n isIdContinueChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c >= '0' && c <= '9') ||\n (c === '$') || (c === '_') ||\n (c === '\\u200C') || (c === '\\u200D') ||\n unicode.ID_Continue.test(c)\n )\n },\n\n isDigit (c) {\n return typeof c === 'string' && /[0-9]/.test(c)\n },\n\n isHexDigit (c) {\n return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n source = String(text)\n parseState = 'start'\n stack = []\n pos = 0\n line = 1\n column = 0\n token = undefined\n key = undefined\n root = undefined\n\n do {\n token = lex()\n\n // This code is unreachable.\n // if (!parseStates[parseState]) {\n // throw invalidParseState()\n // }\n\n parseStates[parseState]()\n } while (token.type !== 'eof')\n\n if (typeof reviver === 'function') {\n return internalize({'': root}, '', reviver)\n }\n\n return root\n}\n\nfunction internalize (holder, name, reviver) {\n const value = holder[name]\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const key = String(i)\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n } else {\n for (const key in value) {\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n }\n\n return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n lexState = 'default'\n buffer = ''\n doubleQuote = false\n sign = 1\n\n for (;;) {\n c = peek()\n\n // This code is unreachable.\n // if (!lexStates[lexState]) {\n // throw invalidLexState(lexState)\n // }\n\n const token = lexStates[lexState]()\n if (token) {\n return token\n }\n }\n}\n\nfunction peek () {\n if (source[pos]) {\n return String.fromCodePoint(source.codePointAt(pos))\n }\n}\n\nfunction read () {\n const c = peek()\n\n if (c === '\\n') {\n line++\n column = 0\n } else if (c) {\n column += c.length\n } else {\n column++\n }\n\n if (c) {\n pos += c.length\n }\n\n return c\n}\n\nconst lexStates = {\n default () {\n switch (c) {\n case '\\t':\n case '\\v':\n case '\\f':\n case ' ':\n case '\\u00A0':\n case '\\uFEFF':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n return\n\n case '/':\n read()\n lexState = 'comment'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n if (util.isSpaceSeparator(c)) {\n read()\n return\n }\n\n // This code is unreachable.\n // if (!lexStates[parseState]) {\n // throw invalidLexState(parseState)\n // }\n\n return lexStates[parseState]()\n },\n\n comment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineComment'\n return\n\n case '/':\n read()\n lexState = 'singleLineComment'\n return\n }\n\n throw invalidChar(read())\n },\n\n multiLineComment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineCommentAsterisk'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n },\n\n multiLineCommentAsterisk () {\n switch (c) {\n case '*':\n read()\n return\n\n case '/':\n read()\n lexState = 'default'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n lexState = 'multiLineComment'\n },\n\n singleLineComment () {\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n lexState = 'default'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n read()\n },\n\n value () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n case 'n':\n read()\n literal('ull')\n return newToken('null', null)\n\n case 't':\n read()\n literal('rue')\n return newToken('boolean', true)\n\n case 'f':\n read()\n literal('alse')\n return newToken('boolean', false)\n\n case '-':\n case '+':\n if (read() === '-') {\n sign = -1\n }\n\n lexState = 'sign'\n return\n\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n buffer = ''\n lexState = 'string'\n return\n }\n\n throw invalidChar(read())\n },\n\n identifierNameStartEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n break\n\n default:\n if (!util.isIdStartChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n identifierName () {\n switch (c) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n buffer += read()\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameEscape'\n return\n }\n\n if (util.isIdContinueChar(c)) {\n buffer += read()\n return\n }\n\n return newToken('identifier', buffer)\n },\n\n identifierNameEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n break\n\n default:\n if (!util.isIdContinueChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n sign () {\n switch (c) {\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', sign * Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n }\n\n throw invalidChar(read())\n },\n\n zero () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n\n case 'x':\n case 'X':\n buffer += read()\n lexState = 'hexadecimal'\n return\n }\n\n return newToken('numeric', sign * 0)\n },\n\n decimalInteger () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalPointLeading () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalPoint () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalFraction () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalExponent () {\n switch (c) {\n case '+':\n case '-':\n buffer += read()\n lexState = 'decimalExponentSign'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentSign () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentInteger () {\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n hexadecimal () {\n if (util.isHexDigit(c)) {\n buffer += read()\n lexState = 'hexadecimalInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n hexadecimalInteger () {\n if (util.isHexDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n string () {\n switch (c) {\n case '\\\\':\n read()\n buffer += escape()\n return\n\n case '\"':\n if (doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case \"'\":\n if (!doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case '\\n':\n case '\\r':\n throw invalidChar(read())\n\n case '\\u2028':\n case '\\u2029':\n separatorChar(c)\n break\n\n case undefined:\n throw invalidChar(read())\n }\n\n buffer += read()\n },\n\n start () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n // This code is unreachable since the default lexState handles eof.\n // case undefined:\n // return newToken('eof')\n }\n\n lexState = 'value'\n },\n\n beforePropertyName () {\n switch (c) {\n case '$':\n case '_':\n buffer = read()\n lexState = 'identifierName'\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameStartEscape'\n return\n\n case '}':\n return newToken('punctuator', read())\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n lexState = 'string'\n return\n }\n\n if (util.isIdStartChar(c)) {\n buffer += read()\n lexState = 'identifierName'\n return\n }\n\n throw invalidChar(read())\n },\n\n afterPropertyName () {\n if (c === ':') {\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforePropertyValue () {\n lexState = 'value'\n },\n\n afterPropertyValue () {\n switch (c) {\n case ',':\n case '}':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforeArrayValue () {\n if (c === ']') {\n return newToken('punctuator', read())\n }\n\n lexState = 'value'\n },\n\n afterArrayValue () {\n switch (c) {\n case ',':\n case ']':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n end () {\n // This code is unreachable since it's handled by the default lexState.\n // if (c === undefined) {\n // read()\n // return newToken('eof')\n // }\n\n throw invalidChar(read())\n },\n}\n\nfunction newToken (type, value) {\n return {\n type,\n value,\n line,\n column,\n }\n}\n\nfunction literal (s) {\n for (const c of s) {\n const p = peek()\n\n if (p !== c) {\n throw invalidChar(read())\n }\n\n read()\n }\n}\n\nfunction escape () {\n const c = peek()\n switch (c) {\n case 'b':\n read()\n return '\\b'\n\n case 'f':\n read()\n return '\\f'\n\n case 'n':\n read()\n return '\\n'\n\n case 'r':\n read()\n return '\\r'\n\n case 't':\n read()\n return '\\t'\n\n case 'v':\n read()\n return '\\v'\n\n case '0':\n read()\n if (util.isDigit(peek())) {\n throw invalidChar(read())\n }\n\n return '\\0'\n\n case 'x':\n read()\n return hexEscape()\n\n case 'u':\n read()\n return unicodeEscape()\n\n case '\\n':\n case '\\u2028':\n case '\\u2029':\n read()\n return ''\n\n case '\\r':\n read()\n if (peek() === '\\n') {\n read()\n }\n\n return ''\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n throw invalidChar(read())\n\n case undefined:\n throw invalidChar(read())\n }\n\n return read()\n}\n\nfunction hexEscape () {\n let buffer = ''\n let c = peek()\n\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n let buffer = ''\n let count = 4\n\n while (count-- > 0) {\n const c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n }\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n start () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforePropertyName () {\n switch (token.type) {\n case 'identifier':\n case 'string':\n key = token.value\n parseState = 'afterPropertyName'\n return\n\n case 'punctuator':\n // This code is unreachable since it's handled by the lexState.\n // if (token.value !== '}') {\n // throw invalidToken()\n // }\n\n pop()\n return\n\n case 'eof':\n throw invalidEOF()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterPropertyName () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator' || token.value !== ':') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n parseState = 'beforePropertyValue'\n },\n\n beforePropertyValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforeArrayValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n if (token.type === 'punctuator' && token.value === ']') {\n pop()\n return\n }\n\n push()\n },\n\n afterPropertyValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforePropertyName'\n return\n\n case '}':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterArrayValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforeArrayValue'\n return\n\n case ']':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n end () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'eof') {\n // throw invalidToken()\n // }\n },\n}\n\nfunction push () {\n let value\n\n switch (token.type) {\n case 'punctuator':\n switch (token.value) {\n case '{':\n value = {}\n break\n\n case '[':\n value = []\n break\n }\n\n break\n\n case 'null':\n case 'boolean':\n case 'numeric':\n case 'string':\n value = token.value\n break\n\n // This code is unreachable.\n // default:\n // throw invalidToken()\n }\n\n if (root === undefined) {\n root = value\n } else {\n const parent = stack[stack.length - 1]\n if (Array.isArray(parent)) {\n parent.push(value)\n } else {\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n\n if (value !== null && typeof value === 'object') {\n stack.push(value)\n\n if (Array.isArray(value)) {\n parseState = 'beforeArrayValue'\n } else {\n parseState = 'beforePropertyName'\n }\n } else {\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n }\n}\n\nfunction pop () {\n stack.pop()\n\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n// return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n// return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n if (c === undefined) {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n }\n\n return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n// if (token.type === 'eof') {\n// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n// }\n\n// const c = String.fromCodePoint(token.value.codePointAt(0))\n// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n column -= 5\n return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n if (replacements[c]) {\n return replacements[c]\n }\n\n if (c < ' ') {\n const hexString = c.charCodeAt(0).toString(16)\n return '\\\\x' + ('00' + hexString).substring(hexString.length)\n }\n\n return c\n}\n\nfunction syntaxError (message) {\n const err = new SyntaxError(message)\n err.lineNumber = line\n err.columnNumber = column\n return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n const stack = []\n let indent = ''\n let propertyList\n let replacerFunc\n let gap = ''\n let quote\n\n if (\n replacer != null &&\n typeof replacer === 'object' &&\n !Array.isArray(replacer)\n ) {\n space = replacer.space\n quote = replacer.quote\n replacer = replacer.replacer\n }\n\n if (typeof replacer === 'function') {\n replacerFunc = replacer\n } else if (Array.isArray(replacer)) {\n propertyList = []\n for (const v of replacer) {\n let item\n\n if (typeof v === 'string') {\n item = v\n } else if (\n typeof v === 'number' ||\n v instanceof String ||\n v instanceof Number\n ) {\n item = String(v)\n }\n\n if (item !== undefined && propertyList.indexOf(item) < 0) {\n propertyList.push(item)\n }\n }\n }\n\n if (space instanceof Number) {\n space = Number(space)\n } else if (space instanceof String) {\n space = String(space)\n }\n\n if (typeof space === 'number') {\n if (space > 0) {\n space = Math.min(10, Math.floor(space))\n gap = ' '.substr(0, space)\n }\n } else if (typeof space === 'string') {\n gap = space.substr(0, 10)\n }\n\n return serializeProperty('', {'': value})\n\n function serializeProperty (key, holder) {\n let value = holder[key]\n if (value != null) {\n if (typeof value.toJSON5 === 'function') {\n value = value.toJSON5(key)\n } else if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n }\n\n if (replacerFunc) {\n value = replacerFunc.call(holder, key, value)\n }\n\n if (value instanceof Number) {\n value = Number(value)\n } else if (value instanceof String) {\n value = String(value)\n } else if (value instanceof Boolean) {\n value = value.valueOf()\n }\n\n switch (value) {\n case null: return 'null'\n case true: return 'true'\n case false: return 'false'\n }\n\n if (typeof value === 'string') {\n return quoteString(value, false)\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'object') {\n return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n }\n\n return undefined\n }\n\n function quoteString (value) {\n const quotes = {\n \"'\": 0.1,\n '\"': 0.2,\n }\n\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n let product = ''\n\n for (let i = 0; i < value.length; i++) {\n const c = value[i]\n switch (c) {\n case \"'\":\n case '\"':\n quotes[c]++\n product += c\n continue\n\n case '\\0':\n if (util.isDigit(value[i + 1])) {\n product += '\\\\x00'\n continue\n }\n }\n\n if (replacements[c]) {\n product += replacements[c]\n continue\n }\n\n if (c < ' ') {\n let hexString = c.charCodeAt(0).toString(16)\n product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n continue\n }\n\n product += c\n }\n\n const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n return quoteChar + product + quoteChar\n }\n\n function serializeObject (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let keys = propertyList || Object.keys(value)\n let partial = []\n for (const key of keys) {\n const propertyString = serializeProperty(key, value)\n if (propertyString !== undefined) {\n let member = serializeKey(key) + ':'\n if (gap !== '') {\n member += ' '\n }\n member += propertyString\n partial.push(member)\n }\n }\n\n let final\n if (partial.length === 0) {\n final = '{}'\n } else {\n let properties\n if (gap === '') {\n properties = partial.join(',')\n final = '{' + properties + '}'\n } else {\n let separator = ',\\n' + indent\n properties = partial.join(separator)\n final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n\n function serializeKey (key) {\n if (key.length === 0) {\n return quoteString(key, true)\n }\n\n const firstChar = String.fromCodePoint(key.codePointAt(0))\n if (!util.isIdStartChar(firstChar)) {\n return quoteString(key, true)\n }\n\n for (let i = firstChar.length; i < key.length; i++) {\n if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n return quoteString(key, true)\n }\n }\n\n return key\n }\n\n function serializeArray (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let partial = []\n for (let i = 0; i < value.length; i++) {\n const propertyString = serializeProperty(String(i), value)\n partial.push((propertyString !== undefined) ? propertyString : 'null')\n }\n\n let final\n if (partial.length === 0) {\n final = '[]'\n } else {\n if (gap === '') {\n let properties = partial.join(',')\n final = '[' + properties + ']'\n } else {\n let separator = ',\\n' + indent\n let properties = partial.join(separator)\n final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n parse,\n stringify,\n}\n\nmodule.exports = JSON5\n", "/* eslint-disable no-continue */\n/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as fsSync from 'node:fs';\nimport { createCoverageMap } from 'istanbul-lib-coverage';\nimport * as fs from 'node:fs/promises';\n\nimport * as LibReport from 'istanbul-lib-report';\nimport * as Reports from 'istanbul-reports';\n\nimport { safeEnv } from './env-utils';\nimport { runExitCode, runText, runWithCapture } from './_exec';\nimport { deriveArgs } from './args';\nimport {\n findRepoRoot,\n argsForDiscovery,\n discoverJestResilient,\n filterCandidatesForProject,\n decideShouldRunJest,\n} from './discovery';\nimport { readCoverageJson, filterCoverageMap } from './coverage-core';\nimport {\n printPerFileCompositeTables,\n printCompactCoverage,\n printDetailedCoverage,\n} from './coverage-print';\nimport {\n JEST_BRIDGE_REPORTER_SOURCE,\n renderVitestFromJestJSON,\n coerceJestJsonToBridge,\n formatJestOutputVitest,\n} from './jest-bridge';\nimport { stripAnsiSimple } from './stacks';\nimport { tintPct } from './bars';\nimport { selectDirectTestsForProduction } from './graph-distance';\n\nconst jestBin = './node_modules/.bin/jest';\nconst babelNodeBin = './node_modules/.bin/babel-node';\nconst moduleSpecifierForRequire =\n // @ts-ignore\n typeof __filename !== 'undefined' ? __filename : (import.meta as any).url;\n\nexport const registerSignalHandlersOnce = () => {\n let handled = false;\n const on = (sig: NodeJS.Signals) => {\n if (handled) {\n return;\n }\n handled = true;\n process.stdout.write(`\\nReceived ${sig}, exiting...\\n`);\n process.exit(130);\n };\n process.once('SIGINT', on);\n process.once('SIGTERM', on);\n};\n\nconst isDebug = (): boolean =>\n Boolean((process.env as unknown as { TEST_CLI_DEBUG?: string }).TEST_CLI_DEBUG);\n\nexport const mergeLcov = async (): Promise<void> => {\n const jestLcovPath = 'coverage/jest/lcov.info';\n const vitestLcovPath = 'coverage/vitest/lcov.info';\n const mergedOutPath = 'coverage/lcov.info';\n const readOrEmpty = async (filePath: string) => {\n try {\n return await (await import('node:fs/promises')).readFile(filePath, 'utf8');\n } catch {\n return '';\n }\n };\n let vitestContent = '';\n let jestContent = '';\n try {\n vitestContent = await readOrEmpty(vitestLcovPath);\n } catch (readVitestError) {\n if (isDebug()) {\n console.info(`read vitest lcov failed: ${String(readVitestError)}`);\n }\n }\n try {\n jestContent = await readOrEmpty(jestLcovPath);\n } catch (readJestError) {\n if (isDebug()) {\n console.info(`read jest lcov failed: ${String(readJestError)}`);\n }\n }\n if (!vitestContent && !jestContent) {\n if (isDebug()) {\n console.info('No coverage outputs found to merge.');\n }\n return;\n }\n const merged = [vitestContent.trim(), jestContent.trim()].filter(Boolean).join('\\n');\n if (merged.length > 0) {\n await (await import('node:fs/promises')).mkdir('coverage', { recursive: true });\n await (await import('node:fs/promises')).writeFile(mergedOutPath, `${merged}\\n`, 'utf8');\n if (isDebug()) {\n console.info(`Merged coverage written to ${mergedOutPath}`);\n }\n } else if (isDebug()) {\n console.info('Coverage files existed but were empty; nothing to merge.');\n }\n};\n\nexport const emitMergedCoverage = async (\n ui: 'jest' | 'both',\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly workspaceRoot?: string;\n readonly editorCmd?: string;\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n readonly executedTests?: readonly string[];\n },\n): Promise<void> => {\n const jestJson = path.join('coverage', 'jest', 'coverage-final.json');\n const jSize = fsSync.existsSync(jestJson) ? fsSync.statSync(jestJson).size : -1;\n const jestSizeLabel = jSize >= 0 ? `${jSize} bytes` : 'missing';\n if (isDebug()) {\n console.info(`Coverage JSON probe \u2192 jest: ${jestSizeLabel}`);\n }\n const jestData = await readCoverageJson(jestJson);\n const jestFilesCount = Object.keys(jestData).length;\n if (isDebug()) {\n console.info(`Decoded coverage entries \u2192 jest: ${jestFilesCount}`);\n }\n const map = createCoverageMap({});\n if (jestFilesCount > 0) {\n try {\n map.merge(jestData);\n } catch (mergeJestError) {\n console.warn(`Failed merging jest coverage JSON: ${String(mergeJestError)}`);\n }\n }\n if (map.files().length === 0) {\n if (isDebug()) {\n console.info('No JSON coverage to merge; skipping merged coverage print.');\n }\n return;\n }\n\n const repoRoot = opts.workspaceRoot ?? (await findRepoRoot());\n\n let filteredMap = filterCoverageMap(map, {\n includes: opts.includeGlobs,\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.warn(\n 'Coverage filters matched 0 files; retrying with include=**/* to avoid empty output.',\n );\n filteredMap = filterCoverageMap(map, {\n includes: ['**/*'],\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.info('Coverage present but still no matches; skipping print.');\n return;\n }\n }\n\n let changedFilesOutput: readonly string[] = [];\n\n try {\n const out = await runText('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB', 'HEAD'], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n });\n changedFilesOutput = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((filePathText) => filePathText.replace(/\\\\/g, '/'));\n } catch (gitError) {\n console.warn(`git diff failed when deriving changed files: ${String(gitError)}`);\n }\n\n await printPerFileCompositeTables({\n map: filteredMap,\n root: repoRoot,\n pageFit: opts.coveragePageFit ?? Boolean(process.stdout.isTTY),\n ...(opts.coverageMaxHotspots !== undefined ? { maxHotspots: opts.coverageMaxHotspots } : {}),\n selectionPaths: opts.selectionPaths ?? [],\n changedFiles: changedFilesOutput,\n executedTests: opts.executedTests ?? [],\n });\n\n const context = LibReport.createContext({\n dir: path.resolve('coverage', 'merged'),\n coverageMap: filteredMap,\n defaultSummarizer: 'nested',\n });\n\n const reporters =\n ui === 'jest'\n ? [Reports.create('text', { file: 'coverage.txt' })]\n : [\n Reports.create('text', { file: 'coverage.txt' }),\n Reports.create('text-summary', { file: 'coverage-summary.txt' }),\n ];\n\n const colorizeIstanbulLine = (lineText: string): string => {\n const separator = /^[-=\\s]+$/;\n if (separator.test(lineText.trim())) {\n return lineText;\n }\n const headerLike = /\\bFile\\b\\s*\\|\\s*%\\s*Stmts\\b/.test(lineText);\n if (headerLike) {\n return lineText;\n }\n if (/^\\s*(Statements|Branches|Functions|Lines)\\s*:/.test(lineText)) {\n // Color the label, percentage, and the raw counts in parens, e.g. ( 822/1816 )\n const updated = lineText.replace(\n /(Statements|Branches|Functions|Lines)(\\s*:\\s*)(\\d+(?:\\.\\d+)?)(%)/,\n (_m, label, sep, num, pct) => {\n const colorize = tintPct(Number(num));\n return `${colorize(label)}${sep}${colorize(`${num}${pct}`)}`;\n },\n );\n return updated.replace(/\\(\\s*(\\d+)\\s*\\/\\s*(\\d+)\\s*\\)/, (_match, coveredText, totalText) => {\n const percent = (() => {\n const totalCount = Number(totalText);\n const coveredCount = Number(coveredText);\n return totalCount > 0 ? (coveredCount / totalCount) * 100 : 0;\n })();\n const colorize = tintPct(percent);\n return colorize(`( ${coveredText}/${totalText} )`);\n });\n }\n if (lineText.includes('|')) {\n const parts = lineText.split('|');\n if (parts.length >= 2) {\n // Compute row weight from numeric percent columns\n const numericValues: number[] = [];\n for (let index = 1; index < parts.length - 1; index += 1) {\n const value = Number((parts[index] ?? '').trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n numericValues.push(value);\n }\n }\n const rowWeight = numericValues.length ? Math.min(...numericValues) : undefined;\n // Tint each numeric % column\n for (let index = 1; index < parts.length - 1; index += 1) {\n const raw = parts[index] ?? '';\n const value = Number(raw.trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n parts[index] = tintPct(value)(raw);\n }\n }\n // Tint the File/Group label and Uncovered column based on row weight\n if (rowWeight !== undefined) {\n parts[0] = tintPct(rowWeight)(parts[0] ?? '');\n const lastIndex = parts.length - 1;\n if (lastIndex >= 1) {\n parts[lastIndex] = tintPct(rowWeight)(parts[lastIndex] ?? '');\n }\n }\n return parts.join('|');\n }\n }\n return lineText;\n };\n for (const reporter of reporters) {\n reporter.execute(context);\n }\n const textPath = path.resolve('coverage', 'merged', 'coverage.txt');\n const summaryPath = path.resolve('coverage', 'merged', 'coverage-summary.txt');\n const filesToPrint: string[] = [];\n if (fsSync.existsSync(textPath)) {\n filesToPrint.push(textPath);\n }\n if (fsSync.existsSync(summaryPath)) {\n filesToPrint.push(summaryPath);\n }\n if (filesToPrint.length > 0) {\n for (const filePath of filesToPrint) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const colored = raw.split(/\\r?\\n/).map(colorizeIstanbulLine).join('\\n');\n process.stdout.write(colored.endsWith('\\n') ? colored : `${colored}\\n`);\n } catch {\n // fall back to raw printing\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n process.stdout.write(raw.endsWith('\\n') ? raw : `${raw}\\n`);\n } catch {\n /* ignore */\n }\n }\n }\n } else {\n // Fallback: no files created by reporter; run standard reporters to stdout (uncolored)\n const stdoutReporters =\n ui === 'jest'\n ? [Reports.create('text')]\n : [Reports.create('text'), Reports.create('text-summary')];\n for (const reporter of stdoutReporters) {\n reporter.execute(context);\n }\n }\n\n // Optional deep-dive per-file coverage: only when explicitly requested (not on 'auto')\n const modeResolved: 'compact' | 'full' =\n opts.coverageMode && opts.coverageMode !== 'auto' ? opts.coverageMode : 'full';\n const shouldDeepDive = opts.coverageDetail !== undefined && opts.coverageDetail !== 'auto';\n if (shouldDeepDive) {\n if (modeResolved === 'compact') {\n await printCompactCoverage({\n map: filteredMap,\n root: repoRoot,\n ...(opts.coverageMaxFiles !== undefined ? { maxFiles: opts.coverageMaxFiles } : {}),\n ...(opts.coverageMaxHotspots !== undefined\n ? { maxHotspots: opts.coverageMaxHotspots }\n : {}),\n ...(opts.coveragePageFit !== undefined ? { pageFit: opts.coveragePageFit } : {}),\n });\n } else {\n const limit = opts.coverageDetail === 'all' ? 'all' : (opts.coverageDetail as number);\n await printDetailedCoverage({\n map: filteredMap,\n root: repoRoot,\n limitPerFile: limit,\n showCode: opts.coverageShowCode ?? Boolean(process.stdout.isTTY),\n });\n }\n }\n};\n\nexport const runJestBootstrap = async (): Promise<void> => {\n const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const code = await runExitCode(npmCmd, ['run', '-s', 'test:jest:bootstrap'], {\n env: safeEnv(process.env, {\n NODE_ENV: 'test',\n }) as unknown as NodeJS.ProcessEnv,\n });\n if (Number(code) !== 0) {\n throw new Error('Jest DB bootstrap failed');\n }\n};\n\nexport const program = async (): Promise<void> => {\n registerSignalHandlersOnce();\n const argv = process.argv.slice(2);\n const {\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n editorCmd,\n workspaceRoot,\n coverageDetail,\n coverageShowCode,\n coverageMode,\n coverageMaxFiles: coverageMaxFilesArg,\n coverageMaxHotspots: coverageMaxHotspotsArg,\n coveragePageFit,\n } = deriveArgs(argv);\n console.info(`Selection \u2192 specified=${selectionSpecified} paths=${selectionPaths.length}`);\n const { jest } = argsForDiscovery(['run'], jestArgs);\n const selectionLooksLikeTest = selectionPaths.some(\n (pathText) => /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) || /(^|\\/)tests?\\//i.test(pathText),\n );\n const selectionLooksLikePath = selectionPaths.some(\n (pathText) => /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText),\n );\n const selectionHasPaths = selectionPaths.length > 0;\n const repoRootForDiscovery = workspaceRoot ?? (await findRepoRoot());\n\n // Expand production selections from bare filenames or repo-root-relative suffixes\n const expandProductionSelections = async (\n tokens: readonly string[],\n repoRoot: string,\n ): Promise<readonly string[]> => {\n const results = new Set<string>();\n for (const raw of tokens) {\n const token = String(raw).trim();\n if (!token) {\n continue;\n }\n const isAbs = path.isAbsolute(token);\n const looksLikeRelPath = /[\\\\/]/.test(token);\n let candidateFromRoot: string | undefined;\n if (token.startsWith('/')) {\n candidateFromRoot = path.join(repoRoot, token.slice(1));\n } else if (looksLikeRelPath) {\n candidateFromRoot = path.join(repoRoot, token);\n } else {\n candidateFromRoot = undefined;\n }\n const tryPushIfProd = (absPath: string) => {\n const norm = path.resolve(absPath).replace(/\\\\/g, '/');\n const isTest = /(^|\\/)tests?\\//i.test(norm) || /\\.(test|spec)\\.[tj]sx?$/i.test(norm);\n if (!isTest && fsSync.existsSync(norm)) {\n results.add(norm);\n }\n };\n if (isAbs && fsSync.existsSync(token)) {\n tryPushIfProd(token);\n continue;\n }\n if (candidateFromRoot && fsSync.existsSync(candidateFromRoot)) {\n tryPushIfProd(candidateFromRoot);\n continue;\n }\n // Use ripgrep to find files whose path ends with the token (filename or suffix)\n try {\n // eslint-disable-next-line no-await-in-loop\n const out = await runText('rg', ['--files', '-g', `**/${token}`], {\n cwd: repoRoot,\n env: safeEnv(process.env, {\n CI: '1',\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 4000,\n });\n const matches = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((rel) => path.resolve(repoRoot, rel).replace(/\\\\/g, '/'))\n .filter(\n (abs) =>\n !abs.includes('/node_modules/') &&\n !abs.includes('/coverage/') &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs),\n );\n matches.forEach((abs) => results.add(abs));\n } catch {\n // ignore\n }\n }\n return Array.from(results);\n };\n\n const initialProdSelections = selectionPaths.filter(\n (pathText) =>\n (/[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText)) &&\n !/(^|\\/)tests?\\//i.test(pathText) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(pathText),\n );\n const expandedProdSelections = initialProdSelections.length\n ? initialProdSelections\n : await expandProductionSelections(selectionPaths, repoRootForDiscovery);\n const selectionIncludesProdPaths = expandedProdSelections.length > 0;\n console.info(\n `Selection classify \u2192 looksLikePath=${selectionLooksLikePath} looksLikeTest=${selectionLooksLikeTest} prodPaths=${selectionIncludesProdPaths}`,\n );\n const stripPathTokens = (args: readonly string[]) =>\n args.filter((token) => !selectionPaths.includes(token));\n const jestDiscoveryArgs = selectionIncludesProdPaths ? stripPathTokens(jest) : jest;\n\n const projectConfigs: string[] = [];\n try {\n const baseCfg = path.resolve('jest.config.js');\n const tsCfg = path.resolve('jest.ts.config.js');\n if (fsSync.existsSync(baseCfg)) {\n projectConfigs.push(baseCfg);\n }\n if (fsSync.existsSync(tsCfg)) {\n projectConfigs.push(tsCfg);\n }\n } catch (err) {\n console.warn(`Failed to discover Jest project configs: ${String(err)}`);\n }\n\n const perProjectFiles = new Map<string, string[]>();\n if (selectionIncludesProdPaths) {\n console.info(\n `Discovering (rg-first) \u2192 related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`,\n );\n const prodSelections = expandedProdSelections;\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const allTests = await discoverJestResilient([...jestDiscoveryArgs, '--config', cfg], {\n cwd: cfgCwd,\n });\n let directPerProject: readonly string[] = [];\n try {\n // eslint-disable-next-line no-await-in-loop\n directPerProject = await selectDirectTestsForProduction({\n rootDir: repoRootForDiscovery,\n testFiles: allTests,\n productionFiles: prodSelections,\n });\n } catch (err) {\n if (isDebug()) {\n console.warn(`direct selection failed for project ${path.basename(cfg)}: ${String(err)}`);\n }\n }\n perProjectFiles.set(cfg, directPerProject as string[]);\n }\n } else {\n console.info(\n `Discovering \u2192 jestArgs=${jestDiscoveryArgs.join(\n ' ',\n )} | related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`,\n );\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const files = await discoverJestResilient([...jestDiscoveryArgs, '--config', cfg], {\n cwd: cfgCwd,\n });\n perProjectFiles.set(cfg, files as string[]);\n }\n }\n\n const perProjectFiltered = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n const files = perProjectFiles.get(cfg) ?? [];\n const selectionTestPaths = selectionPaths.filter(\n (pathToken) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathToken) || /(^|\\/)tests?\\//i.test(pathToken),\n );\n const candidates = selectionHasPaths && selectionLooksLikeTest ? selectionTestPaths : files;\n const absFiles = candidates\n .map((candidatePath) =>\n path.isAbsolute(candidatePath)\n ? candidatePath\n : path.join(repoRootForDiscovery, candidatePath),\n )\n .map((absolutePath) => absolutePath.replace(/\\\\/g, '/'));\n // eslint-disable-next-line no-await-in-loop\n const onlyOwned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n absFiles,\n path.dirname(cfg),\n );\n perProjectFiltered.set(cfg, onlyOwned as string[]);\n }\n\n let jestFiles = Array.from(perProjectFiltered.values()).flat();\n console.info(`Discovery results \u2192 jest=${jestFiles.length} (projects=${projectConfigs.length})`);\n\n const looksLikeTestPath = (candidatePath: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(candidatePath) || /(^|\\/)tests?\\//i.test(candidatePath);\n const prodSelections = expandedProdSelections;\n\n let effectiveJestFiles = jestFiles.slice();\n if (selectionHasPaths && prodSelections.length > 0) {\n console.info(`rg related \u2192 prodSelections=${prodSelections.length} (starting)`);\n const repoRootForRefinement = workspaceRoot ?? (await findRepoRoot());\n const selectionKey = prodSelections\n .map((absPath) => path.relative(repoRootForRefinement, absPath).replace(/\\\\/g, '/'))\n .sort((a, b) => a.localeCompare(b))\n .join('|');\n const { cachedRelated, findRelatedTestsFast, DEFAULT_TEST_GLOBS } = await import(\n './fast-related'\n );\n const { DEFAULT_EXCLUDE } = await import('./args');\n const rgMatches = await cachedRelated({\n repoRoot: repoRootForRefinement,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot: repoRootForRefinement,\n productionPaths: prodSelections,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n console.info(`rg candidates \u2192 count=${rgMatches.length}`);\n console.info('rg candidates \u2192');\n const normalizedCandidates = rgMatches.map((candidatePath) =>\n candidatePath.replace(/\\\\/g, '/'),\n );\n normalizedCandidates.forEach((candidatePath) => console.info(` - ${candidatePath}`));\n const rgSet = new Set(rgMatches.map((candidate) => candidate.replace(/\\\\/g, '/')));\n if (rgSet.size > 0) {\n if (selectionIncludesProdPaths) {\n // Overwrite jestFiles with rg candidates and re-filter per project ownership\n const rgCandidates = Array.from(rgSet);\n const perProjectFromRg = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n rgCandidates,\n path.dirname(cfg),\n );\n perProjectFromRg.set(cfg, owned as string[]);\n }\n // If ownership filtering lost all candidates,\n // run a content-based import scan on rg candidates to keep only relevant tests\n let totalOwned = Array.from(perProjectFromRg.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg2, owned] of perProjectFromRg.entries()) {\n perProjectFiltered.set(cfg2, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n } else {\n const repoRootForScan = repoRootForDiscovery;\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRootForScan, abs).replace(/\\\\/g, '/');\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, '');\n const base = path.basename(withoutExt);\n const segs = withoutExt.split('/');\n const tail2 = segs.slice(-2).join('/');\n return Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));\n };\n const seeds = Array.from(new Set(prodSelections.flatMap(toSeeds)));\n const includesSeed = (text: string) => seeds.some((seed) => text.includes(seed));\n const tryRead = (filePath: string): string => {\n try {\n return fsSync.readFileSync(filePath, 'utf8');\n } catch {\n return '';\n }\n };\n const resolveLocalImport = (fromFile: string, spec: string): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const cand = path.resolve(baseDir, spec);\n const exts = ['', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];\n for (const ext of exts) {\n const full = ext ? `${cand}${ext}` : cand;\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n // index files\n for (const ext of exts) {\n const full = path.join(cand, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n return undefined;\n };\n const importSpecs = (body: string): string[] => {\n const out: string[] = [];\n const importRe = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRe = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n let importMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((importMatch = importRe.exec(body))) {\n out.push(importMatch[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n let requireMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((requireMatch = requireRe.exec(body))) {\n out.push(requireMatch[1]!);\n }\n return out;\n };\n const keptCandidates: string[] = [];\n for (const cand of rgCandidates) {\n const body = tryRead(cand);\n if (includesSeed(body)) {\n keptCandidates.push(cand);\n continue;\n }\n const specs = importSpecs(body).filter(\n (sp) => sp.startsWith('.') || sp.startsWith('/'),\n );\n let kept = false;\n for (const spec of specs) {\n const target = resolveLocalImport(cand, spec);\n if (!target) {\n continue;\n }\n const tb = tryRead(target);\n if (includesSeed(tb)) {\n kept = true;\n break;\n }\n }\n if (kept) {\n keptCandidates.push(cand);\n }\n }\n if (keptCandidates.length > 0) {\n const perProjectFromScan = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n keptCandidates,\n path.dirname(cfg),\n );\n perProjectFromScan.set(cfg, owned as string[]);\n }\n totalOwned = Array.from(perProjectFromScan.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg, owned] of perProjectFromScan.entries()) {\n perProjectFiltered.set(cfg, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n }\n }\n }\n // If still zero after scan, leave as zero to trigger jest-list fallback later\n // and do NOT assign all candidates to an arbitrary project.\n } else {\n const narrowedJest = effectiveJestFiles.filter((candidate) =>\n rgSet.has(candidate.replace(/\\\\/g, '/')),\n );\n if (narrowedJest.length > 0) {\n effectiveJestFiles = narrowedJest;\n }\n }\n }\n if (effectiveJestFiles.length === 0) {\n const repoRoot = repoRootForRefinement;\n const seeds = prodSelections\n .map((abs) =>\n path\n .relative(repoRoot, abs)\n .replace(/\\\\/g, '/')\n .replace(/\\.(m?[tj]sx?)$/i, ''),\n )\n .flatMap((rel) => {\n const base = path.basename(rel);\n const segments = rel.split('/');\n return Array.from(new Set([rel, base, segments.slice(-2).join('/')].filter(Boolean)));\n });\n\n const includesSeed = (text: string) => seeds.some((seed) => text.includes(seed));\n const tryReadFile = async (absPath: string): Promise<string> => {\n try {\n return await fs.readFile(absPath, 'utf8');\n } catch {\n return '';\n }\n };\n const resolveLocalImport = (fromFile: string, spec: string): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const candidate = path.resolve(baseDir, spec);\n const extensions = ['', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'];\n for (const ext of extensions) {\n const fullPath = ext ? `${candidate}${ext}` : candidate;\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n for (const ext of extensions) {\n const fullPath = path.join(candidate, `index${ext}`);\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n return undefined;\n };\n const importOrExportSpecs = (body: string): string[] => {\n const results: string[] = [];\n const importRegex = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRegex = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n const exportFromRegex = /export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"];?/g;\n let match: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((match = importRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = requireRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = exportFromRegex.exec(body))) {\n results.push(match[1]!);\n }\n return results;\n };\n\n const union = Array.from(new Set<string>(jestFiles));\n const keep = new Set<string>();\n const visitedBodyCache = new Map<string, string>();\n const specCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n\n const getBody = async (absPath: string): Promise<string> => {\n const existing = visitedBodyCache.get(absPath);\n if (existing !== undefined) {\n return existing;\n }\n const content = await tryReadFile(absPath);\n visitedBodyCache.set(absPath, content);\n return content;\n };\n\n const getSpecs = async (absPath: string): Promise<readonly string[]> => {\n const cached = specCache.get(absPath);\n if (cached !== undefined) {\n return cached;\n }\n const body = await getBody(absPath);\n const specs = importOrExportSpecs(body);\n specCache.set(absPath, specs);\n return specs;\n };\n\n const resolveSpec = (fromFile: string, spec: string): string | undefined => {\n const key = `${fromFile}|${spec}`;\n if (resolutionCache.has(key)) {\n return resolutionCache.get(key);\n }\n const resolved =\n spec.startsWith('.') || spec.startsWith('/')\n ? resolveLocalImport(fromFile, spec)\n : undefined;\n resolutionCache.set(key, resolved);\n return resolved;\n };\n\n const MAX_DEPTH = 5;\n const seen = new Set<string>();\n const matchesTransitively = async (absTestPath: string, depth: number): Promise<boolean> => {\n if (depth > MAX_DEPTH) {\n return false;\n }\n const cacheKey = `${absTestPath}@${depth}`;\n if (seen.has(cacheKey)) {\n return false;\n }\n seen.add(cacheKey);\n const body = await getBody(absTestPath);\n if (includesSeed(body)) {\n return true;\n }\n const specs = await getSpecs(absTestPath);\n for (const spec of specs) {\n const target = resolveSpec(absTestPath, spec);\n if (!target) {\n continue;\n }\n // eslint-disable-next-line no-await-in-loop\n const targetBody = await getBody(target);\n if (includesSeed(targetBody)) {\n return true;\n }\n // eslint-disable-next-line no-await-in-loop\n if (await matchesTransitively(target, depth + 1)) {\n return true;\n }\n }\n return false;\n };\n\n const concurrency = 16;\n let scanIndex = 0;\n const workers: Promise<void>[] = [];\n for (let workerIndex = 0; workerIndex < concurrency; workerIndex += 1) {\n workers.push(\n // eslint-disable-next-line no-loop-func\n (async () => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentIndex = scanIndex;\n if (currentIndex >= union.length) {\n break;\n }\n scanIndex += 1;\n const candidate = union[currentIndex]!;\n // eslint-disable-next-line no-await-in-loop\n const ok = await matchesTransitively(candidate, 0);\n if (ok) {\n keep.add(candidate);\n }\n }\n })(),\n );\n }\n await Promise.all(workers);\n\n const jestKept = jestFiles\n .filter((candidate) => keep.has(candidate))\n .sort((left, right) => left.localeCompare(right));\n if (jestKept.length) {\n effectiveJestFiles = jestKept;\n }\n console.info(`fallback refine (transitive) \u2192 jest=${effectiveJestFiles.length}`);\n }\n }\n\n const jestDecision = decideShouldRunJest([], effectiveJestFiles, {\n selectionSpecified,\n selectionPaths,\n });\n const { shouldRunJest } = jestDecision;\n const jestCount = effectiveJestFiles.length;\n const sharePct = Math.round(jestDecision.share * 100);\n const msg = shouldRunJest\n ? `Jest selected (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`\n : `Skipping Jest (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`;\n console.info(`Discovery \u2192 jest: ${jestCount}. ${msg}`);\n\n if (!shouldRunJest) {\n console.warn('No matching tests were discovered for either Vitest or Jest.');\n console.info(`Jest args: ${[...jestDiscoveryArgs, '--listTests'].join(' ')}`);\n console.info(\n 'Tip: check your -t/--testNamePattern and file path; Jest lists files selected by your patterns.',\n );\n process.exit(1);\n return;\n }\n\n console.info(`Run plan \u2192 Jest maybe=${shouldRunJest} (projects=${projectConfigs.length})`);\n let jestExitCode = 0;\n const executedTestFilesSet = new Set<string>();\n if (shouldRunJest) {\n console.info('Starting Jest (no Vitest targets)\u2026');\n await runJestBootstrap();\n const jestRunArgs = selectionIncludesProdPaths ? stripPathTokens(jestArgs) : jestArgs;\n const projectsToRun = projectConfigs.filter(\n (cfg) => (perProjectFiltered.get(cfg) ?? []).length > 0,\n );\n const totalProjectsToRun = projectsToRun.length;\n const stripFooter = (text: string): string => {\n const lines = text.split('\\n');\n const idx = lines.findIndex((ln) => /^Test Files\\s/.test(stripAnsiSimple(ln)));\n return idx >= 0 ? lines.slice(0, idx).join('\\n').trimEnd() : text;\n };\n for (let projIndex = 0; projIndex < projectsToRun.length; projIndex += 1) {\n const cfg = projectsToRun[projIndex]!;\n const isLastProject = projIndex === totalProjectsToRun - 1;\n const files = perProjectFiltered.get(cfg) ?? [];\n if (files.length === 0) {\n console.info(`Project ${path.basename(cfg)}: 0 matching tests after filter; skipping.`);\n // eslint-disable-next-line no-continue\n continue;\n }\n files.forEach((absTestPath) =>\n executedTestFilesSet.add(path.resolve(absTestPath).replace(/\\\\/g, '/')),\n );\n const outJson = path.join(\n os.tmpdir(),\n `jest-bridge-${Date.now()}-${Math.random().toString(36).slice(2)}.json`,\n );\n const reporterPath = path.resolve('scripts/jest-vitest-bridge.cjs');\n try {\n if (!fsSync.existsSync(reporterPath)) {\n fsSync.mkdirSync(path.dirname(reporterPath), { recursive: true });\n fsSync.writeFileSync(reporterPath, JEST_BRIDGE_REPORTER_SOURCE, 'utf8');\n }\n } catch (ensureReporterError) {\n console.warn(`Unable to ensure jest bridge reporter: ${String(ensureReporterError)}`);\n }\n // eslint-disable-next-line no-await-in-loop\n // Ensure any explicitly selected paths (tests or production files) are included in coverage\n const selectedFilesForCoverage = selectionPaths\n .filter((pathToken) => /[\\\\/]/.test(pathToken))\n // Avoid restricting coverage to test files when a test path is selected\n .filter((pathToken) => !looksLikeTestPath(pathToken))\n .map((pathToken) => path.relative(repoRootForDiscovery, pathToken).replace(/\\\\\\\\/g, '/'))\n .filter((rel) => rel && !/^\\.+\\//.test(rel))\n .map((rel) => (rel.startsWith('./') ? rel : `./${rel}`));\n const coverageFromArgs: string[] = [];\n for (const relPath of selectedFilesForCoverage) {\n coverageFromArgs.push('--collectCoverageFrom', relPath);\n }\n\n // eslint-disable-next-line no-await-in-loop\n const { code, output } = await runWithCapture(\n babelNodeBin,\n [\n '--extensions',\n '.js,.ts',\n jestBin,\n '--config',\n cfg,\n '--runTestsByPath',\n '--reporters',\n reporterPath,\n '--silent',\n '--colors',\n '--json',\n '--outputFile',\n outJson,\n ...jestRunArgs,\n ...coverageFromArgs,\n '--passWithNoTests',\n ...files,\n ],\n {\n env: safeEnv(process.env, {\n NODE_ENV: 'test',\n JEST_BRIDGE_OUT: outJson,\n FORCE_COLOR: '3',\n TERM: process.env.TERM || 'xterm-256color',\n }) as unknown as NodeJS.ProcessEnv,\n },\n );\n let pretty = '';\n try {\n const debug = isDebug();\n if (debug) {\n const capturedLen = output.length;\n console.info(`jest captured output length=${capturedLen}`);\n const fileSizeBytes = fsSync.existsSync(outJson) ? fsSync.statSync(outJson).size : -1;\n console.info(`bridge json @ ${outJson} size=${fileSizeBytes}`);\n }\n const jsonText = fsSync.readFileSync(outJson, 'utf8');\n const parsed = JSON.parse(jsonText) as unknown;\n const bridge = coerceJestJsonToBridge(parsed);\n pretty = renderVitestFromJestJSON(bridge, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n });\n if (debug) {\n const preview = pretty.split('\\n').slice(0, 3).join('\\n');\n console.info(`pretty preview (json):\\n${preview}${pretty.includes('\\n') ? '\\n\u2026' : ''}`);\n }\n } catch (jsonErr) {\n const debug = isDebug();\n if (debug) {\n console.info('renderer: fallback to text prettifier (missing/invalid JSON)');\n console.info(String(jsonErr));\n console.info(`fallback: raw output lines=${output.split(/\\r?\\n/).length}`);\n }\n const renderOpts = {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n } as const;\n pretty = formatJestOutputVitest(output, renderOpts);\n if (debug) {\n const preview = pretty.split('\\n').slice(0, 3).join('\\n');\n console.info(`pretty preview (text):\\n${preview}${pretty.includes('\\n') ? '\\n\u2026' : ''}`);\n }\n }\n if (!isLastProject) {\n pretty = stripFooter(pretty);\n }\n if (pretty.trim().length > 0) {\n process.stdout.write(pretty.endsWith('\\n') ? pretty : `${pretty}\\n`);\n }\n if (Number(code) !== 0) {\n jestExitCode = code;\n }\n }\n } else {\n console.info('Jest run skipped based on selection and thresholds.');\n }\n\n // If abort-on-failure is requested for coverage, exit immediately after tests when failing\n if (collectCoverage && shouldRunJest && coverageAbortOnFailure && jestExitCode !== 0) {\n process.exit(jestExitCode);\n }\n\n if (collectCoverage && shouldRunJest) {\n await mergeLcov();\n const repoRoot = workspaceRoot ?? (await findRepoRoot());\n const mergedOptsBase = {\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n workspaceRoot: repoRoot,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n ...(coverageDetail !== undefined ? { coverageDetail } : {}),\n ...(coverageShowCode !== undefined ? { coverageShowCode } : {}),\n coverageMode,\n ...(coverageMaxFilesArg !== undefined ? { coverageMaxFiles: coverageMaxFilesArg } : {}),\n ...(coverageMaxHotspotsArg !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsArg }\n : {}),\n coveragePageFit,\n executedTests: Array.from(executedTestFilesSet),\n } as const;\n await emitMergedCoverage(coverageUi, mergedOptsBase);\n }\n\n const finalExitCode = jestExitCode;\n process.exit(finalExitCode);\n};\n", "/* eslint-disable no-continue */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { DEFAULT_EXCLUDE } from \"./args\";\nimport {\n cachedRelated,\n findRelatedTestsFast,\n DEFAULT_TEST_GLOBS,\n} from \"./fast-related\";\nimport { selectDirectTestsForProduction } from \"./graph-distance\";\n\nexport async function findRepoRoot(): Promise<string> {\n let workingDirectory = process.cwd();\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await fs.stat(path.join(workingDirectory, \".git\"));\n return workingDirectory;\n } catch {\n const parentDirectory = path.dirname(workingDirectory);\n if (parentDirectory === workingDirectory) {\n return process.cwd();\n }\n workingDirectory = parentDirectory;\n }\n }\n}\n\nexport const WATCH_FLAGS = new Set([\"--watch\", \"-w\", \"--watchAll\"]);\n\nexport const argsForDiscovery = (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[]\n) => {\n const COVERAGE_PREFIXES = [\n \"--coverage\",\n \"--coverageReporters\",\n \"--coverageDirectory\",\n \"--coverage.reporter\",\n \"--coverage.reportsDirectory\",\n ] as const;\n const strip = (args: readonly string[]) => {\n const out: string[] = [];\n for (let i = 0; i < args.length; i += 1) {\n const token = args[i]!;\n if (token === \"run\") {\n continue;\n }\n if (WATCH_FLAGS.has(token)) {\n continue;\n }\n const isCoverage =\n COVERAGE_PREFIXES.some(\n (prefix) => token === prefix || token.startsWith(`${prefix}=`)\n ) ||\n (COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length &&\n !String(args[i + 1]).startsWith(\"-\"));\n if (isCoverage) {\n if (\n COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length\n ) {\n i += 1;\n }\n continue;\n }\n out.push(token);\n }\n return out;\n };\n const base = strip(jestArgs);\n const withNoWatchman = base.includes(\"--no-watchman\")\n ? base\n : [...base, \"--no-watchman\"];\n return { vitest: [], jest: withNoWatchman };\n};\n\nexport type FilesObject = { readonly files: readonly string[] };\nexport const isFilesObject = (candidate: unknown): candidate is FilesObject =>\n typeof candidate === \"object\" && candidate !== null && \"files\" in candidate;\n\nexport async function discoverJest(\n jestArgs: readonly string[],\n opts?: {\n readonly relatedPaths?: readonly string[];\n readonly patterns?: readonly string[];\n readonly cwd?: string;\n }\n): Promise<string[]> {\n const hasRelated = Boolean(\n opts?.relatedPaths && opts.relatedPaths.length > 0\n );\n const hasPatterns = Boolean(opts?.patterns && opts.patterns.length > 0);\n // Always include --listTests so stdout is a file list, even when using --findRelatedTests\n const listArgs = [\n ...jestArgs,\n \"--listTests\",\n ...(hasRelated ? ([\"--findRelatedTests\"] as const) : ([] as const)),\n ...(hasRelated\n ? (opts!.relatedPaths as readonly string[]) ?? []\n : ([] as const)),\n ...(hasPatterns\n ? (opts!.patterns as readonly string[]) ?? []\n : ([] as const)),\n ];\n const babelNodeBin = \"./node_modules/.bin/babel-node\";\n const jestBin = \"./node_modules/.bin/jest\";\n const raw = await runText(\n babelNodeBin,\n [\"--extensions\", \".js,.ts\", jestBin, ...listArgs],\n {\n cwd: opts?.cwd ?? process.cwd(),\n env: safeEnv(process.env, {\n CI: \"1\",\n NODE_ENV: \"test\",\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 20000,\n }\n );\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nexport const discoverJestResilient = async (\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<readonly string[]> => {\n try {\n return await discoverJest(jestArgs, opts);\n } catch (err) {\n const msg = String((err as Error)?.message ?? err);\n if (!msg.includes(\"timed out\")) {\n throw err;\n }\n const repoRoot = opts?.cwd ?? (await findRepoRoot());\n const related = opts?.relatedPaths ?? [];\n if (related.length === 0) {\n console.warn(\n \"Jest list timed out and no related production paths were provided; falling back to empty Jest set.\"\n );\n return [] as string[];\n }\n console.warn(\n `Jest list timed out; falling back to ripgrep-based related test discovery for ${related.length} prod path(s).`\n );\n const selectionKey = related\n .map((abs) => path.relative(repoRoot, abs).replace(/\\\\/g, \"/\"))\n .sort()\n .join(\"|\");\n const rgMatches = await cachedRelated({\n repoRoot,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot,\n productionPaths: related,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n const toAbsolutePosix = (candidatePath: string) => {\n const isAbs = path.isAbsolute(candidatePath);\n const absJoined = isAbs\n ? candidatePath\n : path.join(repoRoot, candidatePath);\n return absJoined.replace(/\\\\/g, \"/\");\n };\n const jestCandidates = rgMatches\n .filter((candidatePath) => !/\\.d\\.ts$/.test(candidatePath))\n .map(toAbsolutePosix);\n if (jestCandidates.length === 0) {\n console.info(\"Fallback produced 0 Jest candidates.\");\n } else {\n console.info(\n `Fallback produced ${jestCandidates.length} Jest candidate(s).`\n );\n }\n return jestCandidates as readonly string[];\n }\n};\n\nexport const discoverTargets = async (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<{\n readonly vitestFiles: readonly string[];\n readonly jestFiles: readonly string[];\n}> => {\n const related = opts?.relatedPaths ?? [];\n const cwd = opts?.cwd;\n // If production paths were provided, select tests that directly import them (Group 1)\n if (related.length > 0) {\n const repoRoot = cwd ?? (await findRepoRoot());\n // List all jest tests under config\n let allTests: readonly string[] = [];\n try {\n allTests = await discoverJest(jestArgs, { cwd: repoRoot });\n } catch {\n allTests = [];\n }\n if (allTests.length > 0) {\n const direct = await selectDirectTestsForProduction({\n rootDir: repoRoot,\n testFiles: allTests,\n productionFiles: related,\n });\n console.debug(\n `Direct-related jest tests: ${direct.length} (from ${allTests.length} total)`\n );\n return { vitestFiles: [] as string[], jestFiles: direct };\n }\n }\n const jestOpts = {\n relatedPaths: related,\n ...(cwd !== undefined ? { cwd } : {}),\n } as const;\n const [jestFiles] = await Promise.all([\n discoverJestResilient(jestArgs, jestOpts),\n ]);\n console.debug(`Discovery \u2192 jest: ${jestFiles.length}`);\n return { vitestFiles: [] as string[], jestFiles };\n};\n\nexport const filterCandidatesForProject = async (\n cfgPath: string,\n jestArgs: readonly string[],\n candidates: readonly string[],\n cwd: string\n): Promise<readonly string[]> => {\n if (candidates.length === 0) {\n return [] as const;\n }\n // Use --listTests with relative file patterns only; avoid --findRelatedTests here\n const toPosixNormalized = (inputPath: string) =>\n inputPath.replace(/\\\\/g, \"/\");\n const relativePatterns = candidates\n .map((absOrRel) =>\n path.isAbsolute(absOrRel) ? path.relative(cwd, absOrRel) : absOrRel\n )\n .map(toPosixNormalized);\n\n console.log(\"relativePatterns:\", relativePatterns);\n let attemptPatterns: string[] = [];\n try {\n attemptPatterns = await discoverJest([...jestArgs, \"--config\", cfgPath], {\n patterns: relativePatterns,\n cwd,\n });\n } catch {\n attemptPatterns = [];\n }\n const normalizedAttemptPatterns = attemptPatterns.map((candidatePath) =>\n toPosixNormalized(candidatePath)\n );\n if (normalizedAttemptPatterns.length > 0) {\n return normalizedAttemptPatterns as readonly string[];\n }\n // Fallback: if Jest couldn't list,\n // pass the relative patterns as absolute paths for '--runTestsByPath'\n const absoluteFromRelative = relativePatterns.map((rel) =>\n toPosixNormalized(path.join(cwd, rel))\n );\n return absoluteFromRelative as readonly string[];\n};\n\nexport const decideShouldRunJest = (\n vitestFiles: readonly string[],\n jestFiles: readonly string[],\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n }\n) => {\n const MAX_JEST_FILES = 200;\n const total = vitestFiles.length + jestFiles.length;\n const share = total > 0 ? jestFiles.length / total : 0;\n const looksLikeTestPath = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n const looksLikePath = (pathText: string) =>\n /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText);\n const anyTestSelected = (opts.selectionPaths ?? []).some(looksLikeTestPath);\n const anyPathSelected = (opts.selectionPaths ?? []).some(looksLikePath);\n if (!opts.selectionSpecified) {\n return { shouldRunJest: false, share, reason: \"broad_run_guard\" } as const;\n }\n if (jestFiles.length === 0) {\n return { shouldRunJest: false, share, reason: \"no_jest_tests\" } as const;\n }\n if (vitestFiles.length === 0) {\n return jestFiles.length > MAX_JEST_FILES\n ? ({\n shouldRunJest: false,\n share: 1,\n reason: \"full_suite_guard\",\n } as const)\n : ({ shouldRunJest: true, share: 1, reason: \"only_jest\" } as const);\n }\n const threshold = anyTestSelected ? 0.7 : 0.8;\n if (jestFiles.length > MAX_JEST_FILES) {\n return { shouldRunJest: false, share, reason: \"full_suite_guard\" } as const;\n }\n if (!anyPathSelected) {\n return share >= 0.85\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n }\n return share >= threshold\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n};\n", "import * as path from \"node:path\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\n\nexport type ImportSpecExtractor = (\n absPath: string\n) => Promise<readonly string[]>;\n\n// Regex patterns for ripgrep (kept as raw templates to preserve backslashes)\nconst RG_IMPORT_FROM = String.raw`import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"]`;\nconst RG_REQUIRE = String.raw`require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)`;\nconst RG_EXPORT_FROM = String.raw`export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"]`;\n\nexport const extractImportSpecs: ImportSpecExtractor = async (absPath) => {\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n RG_IMPORT_FROM,\n \"-e\",\n RG_REQUIRE,\n \"-e\",\n RG_EXPORT_FROM,\n absPath,\n ];\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n};\n\nexport const isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Return tests that directly import any of the production files (distance 1).\nexport const selectDirectTestsForProduction = async (opts: {\n readonly rootDir: string;\n readonly testFiles: readonly string[];\n readonly productionFiles: readonly string[];\n}): Promise<readonly string[]> => {\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const prodSet = new Set(\n opts.productionFiles.map((prodPath) =>\n path.resolve(prodPath).replace(/\\\\/g, \"/\")\n )\n );\n const out: string[] = [];\n for (const testAbsRaw of opts.testFiles) {\n const testAbs = path.resolve(testAbsRaw).replace(/\\\\/g, \"/\");\n let specs: readonly string[] = [];\n const cached = specsCache.get(testAbs);\n if (cached !== undefined) {\n specs = cached;\n } else {\n // eslint-disable-next-line no-await-in-loop\n specs = await extractImportSpecs(testAbs);\n specsCache.set(testAbs, specs);\n }\n let direct = false;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n testAbs,\n spec,\n opts.rootDir,\n resolutionCache\n );\n if (resolved && prodSet.has(resolved)) {\n direct = true;\n break;\n }\n }\n if (direct) {\n out.push(testAbs);\n }\n }\n return out;\n};\n", "import * as path from 'node:path';\nimport * as fsSync from 'node:fs';\n\nconst INDEX_NOT_FOUND = -1;\nconst ZERO = 0;\nconst ONE = 1;\n\ntype TsLikePathsConfig = {\n readonly configDir: string;\n readonly baseUrl?: string;\n readonly paths?: Record<string, readonly string[]>;\n};\n\ntype JestAliasConfig = {\n readonly configDir: string;\n readonly mappers: ReadonlyArray<{ pattern: RegExp; target: string }>;\n readonly moduleDirs: ReadonlyArray<string>;\n};\n\ntype BabelAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n readonly roots: ReadonlyArray<string>;\n readonly extensions: ReadonlyArray<string>;\n};\n\ntype ModuleResolverOptions = {\n alias?: Record<string, string>;\n root?: readonly string[];\n extensions?: readonly string[];\n};\n\ntype MetroAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n};\n\nconst tsConfigLookupCache = new Map<string, TsLikePathsConfig | null>();\nconst jestConfigLookupCache = new Map<string, JestAliasConfig | null>();\nconst babelConfigLookupCache = new Map<string, BabelAliasConfig | null>();\nconst metroConfigLookupCache = new Map<string, MetroAliasConfig | null>();\n\nconst FILE_EXTS = [\n '',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.mts',\n '.cts',\n '.json',\n] as const;\n\nexport const tryResolveFile = (candidateBase: string): string | undefined => {\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n try {\n const stat = fsSync.statSync(full);\n if (stat.isFile()) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n } catch {\n // ignore\n }\n }\n }\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n }\n return undefined;\n};\n\nconst JEST_CONFIG_FILENAMES = [\n 'jest.config.js',\n 'jest.config.cjs',\n 'jest.config.mjs',\n 'jest.config.ts',\n 'jest.config.cts',\n];\n\nconst loadNearestJestConfig = (startDir: string, rootDir: string): JestAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = jestConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of JEST_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const mappers: Array<{ pattern: RegExp; target: string }> = [];\n const moduleDirs: string[] = [];\n const mapperBlockMatch = raw.match(/moduleNameMapper\\s*:\\s*\\{([\\s\\S]*?)\\}/m);\n if (mapperBlockMatch) {\n const [, body = ''] = mapperBlockMatch;\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*[\"']([^\"']+)[\"']/g;\n let matchResult: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((matchResult = pairRe.exec(body))) {\n const [, patternSrcRaw, targetRaw] = matchResult as unknown as [string, string, string];\n if (patternSrcRaw && targetRaw) {\n try {\n const pattern = new RegExp(patternSrcRaw);\n mappers.push({ pattern, target: targetRaw });\n } catch {\n // ignore invalid regex entries\n }\n }\n }\n }\n const dirsMatch = raw.match(/moduleDirectories\\s*:\\s*\\[([^\\]]*?)\\]/m);\n if (dirsMatch) {\n const [, arr = ''] = dirsMatch;\n const strRe = /[\"']([^\"']+)[\"']/g;\n let dirMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((dirMatch = strRe.exec(arr))) {\n const [, capturedDirRaw] = dirMatch as unknown as [string, string];\n if (capturedDirRaw && capturedDirRaw.length > ZERO) {\n moduleDirs.push(capturedDirRaw);\n }\n }\n }\n const cfg: JestAliasConfig = {\n configDir: path.dirname(filePath),\n mappers,\n moduleDirs,\n };\n jestConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n jestConfigLookupCache.set(cur, null);\n return null;\n }\n }\n jestConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyJestMappings = (spec: string, cfg: JestAliasConfig): string | undefined => {\n for (const mapping of cfg.mappers) {\n const { pattern, target } = mapping;\n if (pattern.test(spec)) {\n const replacedRoot = target.replace(/<rootDir>/g, cfg.configDir);\n const candidate = spec.replace(pattern, replacedRoot);\n const res = tryResolveFile(candidate);\n if (res) {\n return res;\n }\n }\n }\n for (const dir of cfg.moduleDirs) {\n if (dir !== 'node_modules') {\n const base = path.isAbsolute(dir) ? dir : path.resolve(cfg.configDir, dir);\n const res = tryResolveFile(path.join(base, spec));\n if (res) {\n return res;\n }\n }\n }\n return undefined;\n};\n\nconst BABEL_CONFIG_FILENAMES = [\n '.babelrc',\n '.babelrc.json',\n 'babel.config.js',\n 'babel.config.cjs',\n 'babel.config.mjs',\n 'babel.config.ts',\n 'babel.config.cts',\n];\n\nconst MODULE_RESOLVER_NAMES = new Set([\n 'module-resolver',\n 'babel-plugin-module-resolver',\n '@babel/plugin-module-resolver',\n]);\n\nconst loadNearestBabelConfig = (startDir: string, rootDir: string): BabelAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = babelConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const name of BABEL_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, name);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n let aliases: Record<string, string> = {};\n const roots: string[] = [];\n const extensions: string[] = [];\n if (filePath.endsWith('.json') || path.basename(filePath) === '.babelrc') {\n try {\n const json = JSON.parse(raw) as { plugins?: unknown };\n const plugins = (json.plugins as unknown[]) || [];\n for (const pluginEntry of plugins) {\n if (Array.isArray(pluginEntry)) {\n const [pluginNameRaw, pluginOptionsRaw] = pluginEntry as [unknown, unknown];\n if (typeof pluginNameRaw === 'string' && MODULE_RESOLVER_NAMES.has(pluginNameRaw)) {\n const opts: ModuleResolverOptions =\n (pluginOptionsRaw as ModuleResolverOptions) || {};\n if (opts.alias && typeof opts.alias === 'object') {\n aliases = { ...aliases, ...opts.alias };\n }\n const rootArr = Array.isArray(opts.root) ? opts.root : [];\n for (const rootEntry of rootArr) {\n if (typeof rootEntry === 'string') {\n roots.push(rootEntry);\n }\n }\n const extArr = Array.isArray(opts.extensions) ? opts.extensions : [];\n for (const extEntry of extArr) {\n if (typeof extEntry === 'string') {\n extensions.push(extEntry);\n }\n }\n }\n }\n }\n } catch {\n // ignore JSON parse\n }\n }\n const cfg: BabelAliasConfig = {\n configDir: path.dirname(filePath),\n aliases,\n roots,\n extensions,\n };\n babelConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n babelConfigLookupCache.set(cur, null);\n return null;\n }\n }\n babelConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyBabelMappings = (spec: string, cfg: BabelAliasConfig): string | undefined => {\n const keys = Object.keys(cfg.aliases);\n let best: string | undefined;\n for (const key of keys) {\n if (matchPathKey(spec, key)) {\n if (!best || key.length > best.length) {\n best = key;\n }\n }\n }\n if (!best) {\n return undefined;\n }\n const replaced = replacePathKey(spec, best);\n const targetTmpl = cfg.aliases[best] ?? '';\n const targetPath = targetTmpl.includes('*') ? targetTmpl.replace('*', replaced) : targetTmpl;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n if (!targetTmpl.includes('*') && replaced) {\n const joined = path.join(abs, replaced);\n const r2 = tryResolveFile(joined);\n if (r2) {\n return r2;\n }\n }\n for (const rootBase of cfg.roots) {\n const base = path.isAbsolute(rootBase) ? rootBase : path.resolve(cfg.configDir, rootBase);\n const r3 = tryResolveFile(path.join(base, spec));\n if (r3) {\n return r3;\n }\n }\n return undefined;\n};\n\nconst METRO_CONFIG_FILENAMES = ['metro.config.js', 'metro.config.cjs', 'metro.config.mjs'];\n\nconst loadNearestMetroConfig = (startDir: string, rootDir: string): MetroAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = metroConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of METRO_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const varMap = new Map<string, string>();\n varMap.set('__dirname', path.dirname(filePath));\n const projectRootMatch = raw.match(/const\\s+projectRoot\\s*=\\s*__dirname\\s*;/);\n if (projectRootMatch) {\n varMap.set('projectRoot', path.dirname(filePath));\n }\n const workspaceRootMatch = raw.match(\n /const\\s+workspaceRoot\\s*=\\s*path\\.resolve\\(\\s*projectRoot\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (workspaceRootMatch) {\n const [, rel = ''] = workspaceRootMatch;\n const base = varMap.get('projectRoot') ?? path.dirname(filePath);\n if (rel) {\n varMap.set('workspaceRoot', path.resolve(base, rel));\n }\n }\n const extraMatch = raw.match(/extraNodeModules\\s*=\\s*\\{([\\s\\S]*?)\\}/m);\n const aliases: Record<string, string> = {};\n if (extraMatch) {\n const body = extraMatch[1] ?? '';\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*([^,]+),?/g;\n let pairMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((pairMatch = pairRe.exec(body))) {\n const [, aliasKeyRaw, rhsRaw] = pairMatch as unknown as [string, string, string];\n const aliasKey = aliasKeyRaw ?? '';\n const rhs = (rhsRaw ?? '').trim();\n let resolved: string | undefined;\n const strMatch = rhs.match(/^[\"']([^\"']+)[\"']$/);\n if (strMatch && strMatch[1]) {\n const strVal = strMatch[1] as string;\n resolved = path.isAbsolute(strVal)\n ? strVal\n : path.resolve(path.dirname(filePath), strVal);\n } else {\n const resMatch = rhs.match(\n /path\\.resolve\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (resMatch && resMatch[1] && resMatch[2]) {\n const varName = resMatch[1] as string;\n const segment = resMatch[2] as string;\n const base = varMap.get(varName) ?? path.dirname(filePath);\n resolved = path.resolve(base, segment);\n }\n }\n if (aliasKey && resolved) {\n aliases[aliasKey] = resolved;\n }\n }\n }\n const cfg: MetroAliasConfig = { configDir: path.dirname(filePath), aliases };\n metroConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n metroConfigLookupCache.set(cur, null);\n return null;\n }\n }\n metroConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyMetroMappings = (spec: string, cfg: MetroAliasConfig): string | undefined => {\n const entries = Object.entries(cfg.aliases);\n let bestKey: string | undefined;\n for (const [alias] of entries) {\n if (spec === alias || spec.startsWith(`${alias}/`)) {\n if (!bestKey || alias.length > bestKey.length) {\n bestKey = alias;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const sureKey = bestKey as string;\n const base = cfg.aliases[sureKey] ?? '';\n if (!base) {\n return undefined;\n }\n const remainder = spec === sureKey ? '' : spec.slice(sureKey.length + 1);\n const candidate = remainder ? path.join(base, remainder) : base;\n const res = tryResolveFile(candidate);\n return res;\n};\n\nconst loadNearestTsOrJsConfig = (startDir: string, rootDir: string): TsLikePathsConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = tsConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n const tsPath = path.join(cur, 'tsconfig.json');\n const jsPath = path.join(cur, 'jsconfig.json');\n if (fsSync.existsSync(tsPath) || fsSync.existsSync(jsPath)) {\n const filePath = fsSync.existsSync(tsPath) ? tsPath : jsPath;\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const json = JSON.parse(raw) as unknown;\n const compilerOptionsRaw = (json as { compilerOptions?: unknown }).compilerOptions ?? {};\n const { baseUrl: baseUrlRaw, paths } = compilerOptionsRaw as {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n const baseUrl = baseUrlRaw ? path.resolve(cur, baseUrlRaw) : undefined;\n const cfg: TsLikePathsConfig = {\n configDir: cur,\n ...(baseUrl ? { baseUrl } : {}),\n ...(paths ? { paths } : {}),\n };\n tsConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n tsConfigLookupCache.set(cur, null);\n return null;\n }\n }\n tsConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyPathsMapping = (spec: string, cfg: TsLikePathsConfig): string | undefined => {\n const map = cfg.paths;\n if (!map) {\n return undefined;\n }\n let bestKey: string | undefined;\n for (const key of Object.keys(map)) {\n if (matchPathKey(spec, key)) {\n if (!bestKey || key.length > bestKey.length) {\n bestKey = key;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const targets = map[bestKey] ?? [];\n const replaced = replacePathKey(spec, bestKey);\n for (const target of targets) {\n const targetPath = target.includes('*') ? target.replace('*', replaced) : target;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n }\n return undefined;\n};\n\nfunction matchPathKey(spec: string, key: string): boolean {\n if (key === spec) {\n return true;\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return false;\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.startsWith(prefix) && spec.endsWith(suffix);\n}\n\nfunction replacePathKey(spec: string, key: string): string {\n if (key === spec) {\n return '';\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return '';\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.slice(prefix.length, spec.length - suffix.length);\n}\n\nfunction resolveWithAliases(fromFile: string, spec: string, rootDir: string): string | undefined {\n const startDir = path.dirname(fromFile);\n let cur: string | undefined = startDir;\n while (cur && cur.startsWith(rootDir)) {\n const tsCfg = loadNearestTsOrJsConfig(cur, rootDir);\n if (tsCfg) {\n const viaPaths = applyPathsMapping(spec, tsCfg);\n if (viaPaths) {\n return viaPaths;\n }\n if (tsCfg.baseUrl) {\n const viaBase = tryResolveFile(path.join(tsCfg.baseUrl, spec));\n if (viaBase) {\n return viaBase;\n }\n }\n }\n const babelCfg = loadNearestBabelConfig(cur, rootDir);\n if (babelCfg) {\n const viaBabel = applyBabelMappings(spec, babelCfg);\n if (viaBabel) {\n return viaBabel;\n }\n }\n const jestCfg = loadNearestJestConfig(cur, rootDir);\n if (jestCfg) {\n const viaJest = applyJestMappings(spec, jestCfg);\n if (viaJest) {\n return viaJest;\n }\n }\n const metroCfg = loadNearestMetroConfig(cur, rootDir);\n if (metroCfg) {\n const viaMetro = applyMetroMappings(spec, metroCfg);\n if (viaMetro) {\n return viaMetro;\n }\n }\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return undefined;\n}\n\nexport const resolveImportWithRoot = (\n fromFile: string,\n spec: string,\n rootDir: string,\n cache: Map<string, string | undefined>,\n): string | undefined => {\n const key = `${fromFile}|${spec}`;\n const cached = cache.get(key);\n if (cached !== undefined) {\n return cached;\n }\n let resolved: string | undefined;\n const baseDir = path.dirname(fromFile);\n const isProjectAbs = spec.startsWith('/');\n const candidateBase = isProjectAbs\n ? path.join(rootDir, spec.slice(ONE))\n : path.resolve(baseDir, spec);\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n if (!resolved) {\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n }\n if (!resolved && !spec.startsWith('.') && !spec.startsWith('/')) {\n resolved = resolveWithAliases(fromFile, spec, rootDir);\n }\n cache.set(key, resolved);\n return resolved;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as fs from 'node:fs/promises';\nimport picomatch from 'picomatch';\nimport { createCoverageMap } from 'istanbul-lib-coverage';\n\nimport { relativizeForMatch } from './paths';\n\nexport const readCoverageJson = async (jsonPath: string) => {\n try {\n const txt = await fs.readFile(jsonPath, 'utf8');\n if (txt.trim().length === 0) {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n const raw = JSON.parse(txt) as unknown;\n return (raw ?? {}) as import('istanbul-lib-coverage').CoverageMapData;\n } catch {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n};\n\nexport const filterCoverageMap = (\n map: import('istanbul-lib-coverage').CoverageMap,\n opts: {\n readonly includes: readonly string[];\n readonly excludes: readonly string[];\n readonly root: string;\n readonly selectionSpecified: boolean;\n },\n) => {\n const picomatchFn = picomatch as unknown as (\n globs: string | readonly string[],\n options?: { readonly nocase?: boolean; readonly dot?: boolean },\n ) => (str: string) => boolean;\n const makeMatcher = (globs: readonly string[]) =>\n globs.length === 0 ? () => true : picomatchFn(globs as string[], { dot: true, nocase: true });\n\n const includeMatch = makeMatcher(opts.includes.length ? opts.includes : ['**/*']);\n const excludeMatch = makeMatcher(opts.excludes);\n const out = createCoverageMap({});\n\n for (const absFile of map.files()) {\n const rel = relativizeForMatch(absFile, opts.root);\n const summary = map.fileCoverageFor(absFile).toSummary();\n\n const executed =\n summary.statements.covered > 0 ||\n summary.functions.covered > 0 ||\n summary.branches.covered > 0 ||\n summary.lines.covered > 0;\n\n if (executed) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n } else {\n const inc = includeMatch(rel);\n let exc = excludeMatch(rel);\n if (opts.selectionSpecified) {\n exc = /\\b(node_modules|coverage|dist|build)\\b/.test(rel) && exc;\n }\n if (inc && !exc) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n }\n }\n }\n return out;\n};\n\nexport const computeUncoveredBlocks = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly start: number; readonly end: number }> => {\n const stmtHitsById = file.data.s as Record<string, number>;\n const sm = file.data.statementMap as Record<\n string,\n { start: { line: number }; end: { line: number } }\n >;\n const missed = new Set<number>();\n for (const statementId of Object.keys(stmtHitsById)) {\n if ((stmtHitsById[statementId] ?? 0) > 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const loc = sm[statementId];\n const from = Math.max(1, loc?.start.line ?? 0);\n const to = Math.max(from, loc?.end.line ?? 0);\n for (let ln = from; ln <= to; ln += 1) {\n missed.add(ln);\n }\n }\n const lines = Array.from(missed).sort((leftLine, rightLine) => leftLine - rightLine);\n const ranges: { start: number; end: number }[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const start = lines[index]!;\n let end = start;\n while (index + 1 < lines.length && lines[index + 1] === end + 1) {\n index += 1;\n end = lines[index]!;\n }\n ranges.push({ start, end });\n }\n return ranges;\n};\n\nexport const missedBranches = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{\n readonly id: string;\n readonly line: number;\n readonly zeroPaths: readonly number[];\n}> => {\n const branchHitsById = file.data.b as Record<string, number[]>;\n const branchMap = file.data.branchMap as Record<string, { line: number }>;\n const out: { id: string; line: number; zeroPaths: number[] }[] = [];\n for (const id of Object.keys(branchHitsById)) {\n const hitsArray = branchHitsById[id] ?? [];\n const zeros: number[] = [];\n hitsArray.forEach((hits, index) => {\n if (hits === 0) {\n zeros.push(index);\n }\n });\n if (zeros.length) {\n out.push({ id, line: branchMap[id]?.line ?? 0, zeroPaths: zeros });\n }\n }\n return out.sort((firstBranch, secondBranch) => firstBranch.line - secondBranch.line);\n};\n\nexport const missedFunctions = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly name: string; readonly line: number }> => {\n const functionHitCounts = file.data.f as Record<string, number>;\n const functionMap = file.data.fnMap as Record<string, { name: string; line: number }>;\n const out: { name: string; line: number }[] = [];\n for (const id of Object.keys(functionHitCounts)) {\n if ((functionHitCounts[id] ?? 0) === 0) {\n const meta = functionMap[id];\n out.push({ name: meta?.name ?? '(anonymous)', line: meta?.line ?? 0 });\n }\n }\n return out.sort((firstFunction, secondFunction) => firstFunction.line - secondFunction.line);\n};\n\nconst clamp = (value: number, lowerBound: number, upperBound: number) =>\n Math.max(lowerBound, Math.min(upperBound, value));\n\nexport const renderCodeFrame = (\n source: string,\n miss: { readonly start: number; readonly end: number },\n context = 3,\n): string => {\n const lines = source.split(/\\r?\\n/);\n const from = clamp(miss.start - context, 1, lines.length);\n const to = clamp(miss.end + context, 1, lines.length);\n const out: string[] = [];\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? '';\n const tag =\n ln >= miss.start && ln <= miss.end\n ? `> ${ln.toString().padStart(4)}|`\n : ` ${ln.toString().padStart(4)}|`;\n out.push(`${tag} ${body}`);\n }\n return out.join('\\n');\n};\n\nexport const compositeBarPct = (\n summary: import('istanbul-lib-coverage').CoverageSummary,\n hotspots: ReadonlyArray<{ readonly start: number; readonly end: number }>,\n): number => {\n const base = Math.min(\n Number.isFinite(summary.lines.pct) ? (summary.lines.pct as number) : 0,\n Number.isFinite(summary.functions.pct) ? (summary.functions.pct as number) : 0,\n Number.isFinite(summary.branches.pct) ? (summary.branches.pct as number) : 0,\n );\n const totalLines = (summary.lines.total ?? 0) as number;\n let penalty = 0;\n if (totalLines > 0 && hotspots.length > 0) {\n const largestRange = Math.max(...hotspots.map((range) => range.end - range.start + 1));\n const concentration = largestRange / totalLines;\n penalty = Math.min(15, Math.round(concentration * 100 * 0.5));\n }\n return Math.max(0, Math.min(100, base - penalty));\n};\n", "import * as path from 'node:path';\n\nexport const toPosix = (p: string) => p.replace(/\\\\/g, '/');\n\nexport const relativizeForMatch = (filePath: string, root: string) => {\n const rel = path.relative(root, filePath);\n return toPosix(rel.startsWith('..') ? filePath : rel);\n};\n\nconst preferVsCode = (hint?: string): boolean =>\n /^(code|vscode)$/i.test(String(hint ?? process.env.COVERAGE_EDITOR)) ||\n process.env.TERM_PROGRAM === 'vscode' ||\n Boolean(process.env.VSCODE_IPC_HOOK);\n\nexport const preferredEditorHref = (absPath: string, line?: number, hint?: string) => {\n const absolute = path.resolve(absPath);\n return preferVsCode(hint)\n ? `vscode://file/${absolute}${typeof line === 'number' ? `:${line}` : ''}`\n : `file://${absolute}${typeof line === 'number' ? `#L${line}` : ''}`;\n};\n\nexport const linkifyPadded =\n (absPath: string, line?: number, hint?: string) => (padded: string) => {\n const trimmed = padded.replace(/\\s+$/u, '');\n const pad = padded.length - trimmed.length;\n return `\\u001B]8;;${preferredEditorHref(absPath, line, hint)}\\u0007${trimmed}\\u001B]8;;\\u0007${' '.repeat(pad)}`;\n };\n", "import * as path from \"node:path\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\nimport { ansi } from \"./ansi\";\nimport { tintPct } from \"./bars\";\nimport { barCell, ColumnSpec, Cell, cell, renderTable } from \"./table\";\nimport { preferredEditorHref, linkifyPadded } from \"./paths\";\nimport {\n compositeBarPct,\n computeUncoveredBlocks,\n missedBranches,\n missedFunctions,\n} from \"./coverage-core\";\n\nexport const printDetailedCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly limitPerFile: number | \"all\";\n readonly showCode: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const files = opts.map.files().sort((fileA, fileB) => {\n const summaryA = opts.map.fileCoverageFor(fileA).toSummary();\n const summaryB = opts.map.fileCoverageFor(fileB).toSummary();\n return summaryA.lines.pct - summaryB.lines.pct;\n });\n for (const abs of files) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const blocks = computeUncoveredBlocks(fc);\n const misses = missedBranches(fc);\n const missFns = missedFunctions(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const max =\n opts.limitPerFile === \"all\"\n ? Number.POSITIVE_INFINITY\n : opts.limitPerFile ?? 5;\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const topBlocks = blocks\n .slice()\n .sort(compareRangesByLengthDescThenStart)\n .slice(0, max);\n if (topBlocks.length === 0 && misses.length === 0 && missFns.length === 0) {\n console.info(ansi.dim(\" No uncovered hotspots.\"));\n console.info(\"\");\n // eslint-disable-next-line no-continue\n continue;\n }\n let src = \"\";\n if (opts.showCode && topBlocks.length > 0) {\n try {\n src = fsSync.readFileSync(abs, \"utf8\");\n } catch {\n src = \"\";\n }\n }\n for (const block of topBlocks) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n block.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${block.start}\\u001B]8;;\\u0007`;\n const label = ` ${ansi.yellow(`L${block.start}`)}\u2013${ansi.yellow(\n `L${block.end}`\n )} ${link}`;\n console.info(label);\n if (opts.showCode && src.length) {\n const lines = src.split(/\\r?\\n/);\n const from = Math.max(1, block.start - 3);\n const to = Math.min(lines.length, block.end + 3);\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? \"\";\n const tag =\n ln >= block.start && ln <= block.end\n ? ansi.red(`>${ln.toString().padStart(4)}|`)\n : ansi.dim(` ${ln.toString().padStart(4)}|`);\n console.info(`${tag} ${body}`);\n }\n }\n }\n if (missFns.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of missFns) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`;\n console.info(` - ${fn.name} @ ${link}`);\n }\n }\n if (misses.length) {\n console.info(ansi.bold(\" Branch paths with zero hits:\"));\n for (const br of misses) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`;\n console.info(\n ` - branch#${br.id} @ ${link} missed paths: [${br.zeroPaths.join(\n \", \"\n )}]`\n );\n }\n }\n console.info(\"\");\n }\n};\n\nexport const printCompactCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly maxFiles?: number;\n readonly maxHotspots?: number;\n readonly pageFit?: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const terminalRows =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const reservedRows = 8;\n const availableRows = Math.max(10, terminalRows - reservedRows);\n const maxHotspotsDerived = opts.pageFit\n ? Math.max(3, Math.floor(availableRows * 0.5))\n : opts.maxHotspots ?? 8;\n const maxFunctionsDerived = opts.pageFit\n ? Math.max(2, Math.floor(availableRows * 0.25))\n : 6;\n const maxBranchesDerived = opts.pageFit\n ? Math.max(2, availableRows - maxHotspotsDerived - maxFunctionsDerived)\n : 6;\n const files = opts.map\n .files()\n .sort(\n (fileA, fileB) =>\n opts.map.fileCoverageFor(fileA).toSummary().lines.pct -\n opts.map.fileCoverageFor(fileB).toSummary().lines.pct\n );\n const fileCap = opts.maxFiles ?? files.length;\n for (const abs of files.slice(0, fileCap)) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const blocks = computeUncoveredBlocks(fc)\n .slice()\n .sort(compareRangesByLengthDescThenStart);\n const missFns = missedFunctions(fc);\n const misses = missedBranches(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const hotspots = blocks.slice(0, maxHotspotsDerived);\n if (hotspots.length) {\n console.info(ansi.bold(\" Hotspots:\"));\n for (const hotspot of hotspots) {\n const len = hotspot.end - hotspot.start + 1;\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n hotspot.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${hotspot.start}\\u001B]8;;\\u0007`;\n console.info(\n ` - L${hotspot.start}\u2013L${hotspot.end} (${len} lines) ${link}`\n );\n }\n }\n const functionsList = missFns.slice(0, maxFunctionsDerived);\n if (functionsList.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of functionsList) {\n console.info(\n ` - ${fn.name} @ \\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const branchesList = misses.slice(0, maxBranchesDerived);\n if (branchesList.length) {\n console.info(ansi.bold(\" Branches with zero-hit paths:\"));\n for (const br of branchesList) {\n console.info(\n ` - L${br.line} branch#${br.id} missed: [${br.zeroPaths.join(\n \", \"\n )}] \\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const restHs = Math.max(0, blocks.length - hotspots.length);\n const restFns = Math.max(0, missFns.length - functionsList.length);\n const restBrs = Math.max(0, misses.length - branchesList.length);\n if (restHs + restFns + restBrs > 0) {\n console.info(\n ansi.dim(\n ` \u2026 truncated: +${restHs} hotspots, +${restFns} funcs, +${restBrs} branches`\n )\n );\n }\n console.info(\"\");\n }\n if (files.length > fileCap) {\n console.info(\n ansi.dim(\n `\u2026 ${\n files.length - fileCap\n } more files omitted (use --coverage.maxFiles or --coverage.mode=full)`\n )\n );\n }\n};\n\n// Shorten a relative path to fit within maxWidth using directory squeezing:\n// keep HEAD dirs, squeeze the MIDDLE as \"\u2026/\", keep TAIL dirs, and always\n// preserve the filename (trimming the stem token-aware as a last resort).\nconst shortenPathPreservingFilename = (\n relPath: string,\n maxWidth: number,\n opts?: {\n readonly keepHead?: number; // soft hint for starting head dirs (default 1)\n readonly keepTail?: number; // soft hint for starting tail dirs (default 1)\n readonly ellipsis?: \"\u2026\" | \"...\"; // default '\u2026'\n readonly minDirChars?: number; // minimum per-dir chars when trimmed (default 1)\n }\n): string => {\n const ellipsis = opts?.ellipsis ?? \"\u2026\";\n const START_HEAD = Math.max(0, opts?.keepHead ?? 1);\n const START_TAIL = Math.max(0, opts?.keepTail ?? 1);\n const MIN_DIR_CHARS = Math.max(1, opts?.minDirChars ?? 2);\n\n if (maxWidth <= 0) {\n return \"\";\n }\n\n const visibleWidth = (text: string): number => [...text].length;\n\n const splitMultiExt = (base: string) => {\n const endings = [\n \".test.ts\",\n \".spec.ts\",\n \".d.ts\",\n \".schema.ts\",\n \".schema.js\",\n \".config.ts\",\n \".config.js\",\n ] as const;\n for (const ending of endings) {\n if (base.endsWith(ending)) {\n return { stem: base.slice(0, -ending.length), ext: ending } as const;\n }\n }\n const ext = path.extname(base);\n return { stem: base.slice(0, -ext.length), ext } as const;\n };\n\n const sliceBalanced = (input: string, width: number): string => {\n if (visibleWidth(input) <= width) {\n return input;\n }\n if (width <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, width);\n }\n const keep = width - visibleWidth(ellipsis);\n const head = Math.ceil(keep / 2);\n const tail = Math.floor(keep / 2);\n return input.slice(0, head) + ellipsis + input.slice(-tail);\n };\n\n const tokenAwareMiddle = (stem: string, budget: number): string => {\n if (budget <= 0) {\n return \"\";\n }\n if (visibleWidth(stem) <= budget) {\n return stem;\n }\n if (budget <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, budget);\n }\n const tokens = stem.split(/([._-])/); // keep separators\n let leftIndex = 0;\n let rightIndex = tokens.length - 1;\n let left = \"\";\n let right = \"\";\n while (leftIndex <= rightIndex) {\n const tryL = left + tokens[leftIndex];\n const tryR = tokens[rightIndex] + right;\n const candL = tryL + ellipsis + right;\n const candR = left + ellipsis + tryR;\n const canL = visibleWidth(candL) <= budget;\n const canR = visibleWidth(candR) <= budget;\n if (canL && (!canR || visibleWidth(candL) >= visibleWidth(candR))) {\n left = tryL;\n leftIndex += 1;\n } else if (canR) {\n right = tryR;\n rightIndex -= 1;\n } else {\n break;\n }\n }\n const glued = left + ellipsis + right;\n if (visibleWidth(glued) < budget - 1) {\n return sliceBalanced(stem, budget);\n }\n return visibleWidth(glued) <= budget ? glued : sliceBalanced(stem, budget);\n };\n\n // Build a candidate label from split parts, collapsing duplicate ellipses\n // and removing any segments that are themselves just an ellipsis string.\n const joinParts = (\n headParts: readonly string[],\n tailParts: readonly string[],\n hideMiddle: boolean,\n baseLabel: string\n ): string => {\n const removeEllipsisSegments = (parts: readonly string[]) =>\n parts.filter((segment) => segment && segment !== ellipsis);\n const headCleaned = removeEllipsisSegments(headParts);\n const tailCleaned = removeEllipsisSegments(tailParts);\n\n const segmentsList: string[] = [];\n if (headCleaned.length) {\n segmentsList.push(headCleaned.join(\"/\"));\n }\n if (hideMiddle) {\n segmentsList.push(ellipsis);\n }\n if (tailCleaned.length) {\n segmentsList.push(tailCleaned.join(\"/\"));\n }\n segmentsList.push(baseLabel);\n\n const squashed: string[] = [];\n for (const segmentText of segmentsList) {\n const previous = squashed[squashed.length - 1];\n const isDuplicateEllipsis =\n segmentText === ellipsis && previous === ellipsis;\n if (!isDuplicateEllipsis) {\n squashed.push(segmentText);\n }\n }\n return squashed.join(\"/\");\n };\n\n // Trim shown directory names to make the candidate fit, token-aware\n const tryTrimDirsToFit = (\n headSrc: readonly string[],\n tailSrc: readonly string[],\n hideMiddle: boolean,\n baseLabel: string,\n max: number\n ): string | null => {\n const headParts = headSrc.map((segment) => segment);\n const tailParts = tailSrc.map((segment) => segment);\n let hidAny = false;\n\n const build = () => {\n const label = joinParts(\n headParts,\n tailParts,\n hideMiddle || hidAny,\n baseLabel\n );\n return { label, width: visibleWidth(label) };\n };\n\n let { label, width } = build();\n if (width <= max) {\n return label;\n }\n\n type Segment = {\n arr: string[];\n idx: number;\n original: string;\n budget: number;\n min: number;\n };\n const segments: Segment[] = [];\n headParts.forEach((part, index) =>\n segments.push({\n arr: headParts,\n idx: index,\n original: headSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n tailParts.forEach((part, index) =>\n segments.push({\n arr: tailParts,\n idx: index,\n original: tailSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n\n let guardCounter = 200;\n while (width > max && guardCounter-- > 0) {\n let best: Segment | undefined;\n let bestSlack = 0;\n for (const seg of segments) {\n const slack = seg.budget - seg.min;\n if (slack > bestSlack) {\n bestSlack = slack;\n best = seg;\n }\n }\n if (!best) {\n break;\n }\n\n const overflow = width - max;\n const reduceBy = Math.min(overflow, best.budget - best.min);\n const nextBudget = Math.max(best.min, best.budget - reduceBy);\n\n // If the segment would shrink below the minimum per-dir chars, hide it.\n if (nextBudget < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n const trimmed = tokenAwareMiddle(best.original, nextBudget);\n if (trimmed === ellipsis || visibleWidth(trimmed) < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n best.arr[best.idx] = trimmed;\n best.budget = visibleWidth(trimmed);\n }\n }\n\n ({ label, width } = build());\n if (width <= max) {\n return label;\n }\n }\n\n return null;\n };\n\n const normalized = relPath.replace(/\\\\/g, \"/\");\n if (visibleWidth(normalized) <= maxWidth) {\n return normalized;\n }\n\n const segs = normalized.split(\"/\");\n const baseName = segs.pop() ?? \"\";\n const { stem, ext } = splitMultiExt(baseName);\n const baseFull = stem + ext;\n\n if (visibleWidth(baseFull) > maxWidth) {\n const stemBudget = Math.max(1, maxWidth - visibleWidth(ext));\n return tokenAwareMiddle(stem, stemBudget) + ext;\n }\n\n if (segs.length === 0) {\n return baseFull;\n }\n\n const total = segs.length;\n let headCount = Math.min(START_HEAD, total);\n let tailCount = Math.min(START_TAIL, Math.max(0, total - headCount));\n if (tailCount === 0 && total > headCount) {\n tailCount = 1;\n }\n\n const buildRaw = (headNum: number, tailNum: number) => {\n const headRaw = segs.slice(0, headNum);\n const tailRaw = segs.slice(total - tailNum);\n const hideMiddle = headNum + tailNum < total;\n return { headRaw, tailRaw, hideMiddle } as const;\n };\n\n let { headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tailCount);\n let candidate = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (!candidate) {\n return baseFull;\n }\n\n while (headCount + tailCount < total) {\n let advanced = false;\n\n if (headCount + tailCount < total) {\n const tryTail = Math.min(tailCount + 1, total - headCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tryTail));\n const candTail = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candTail) {\n tailCount = tryTail;\n candidate = candTail;\n advanced = true;\n }\n }\n\n if (!advanced && headCount + tailCount < total) {\n const tryHead = Math.min(headCount + 1, total - tailCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(tryHead, tailCount));\n const candHead = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candHead) {\n headCount = tryHead;\n candidate = candHead;\n advanced = true;\n }\n }\n\n if (!advanced) {\n break;\n }\n }\n\n if (headCount + tailCount >= total) {\n const full = `${segs.join(\"/\")}/${baseFull}`;\n return visibleWidth(full) <= maxWidth ? full : candidate;\n }\n\n return candidate;\n};\n\nconst isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Extract import/require/export-from specs for one file using ripgrep with timeout.\nconst extractImportSpecs = async (\n absPath: string,\n cache: Map<string, readonly string[]>\n): Promise<readonly string[]> => {\n const cached = cache.get(absPath);\n if (cached) {\n return cached;\n }\n\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n \"import\\\\s+[^'\\\"\\n]*from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\",\n \"-e\",\n \"require\\\\(\\\\s*['\\\"]([^'\\\"]+)['\\\"]\\\\s*\\\\)\",\n \"-e\",\n \"export\\\\s+(?:\\\\*|\\\\{[^}]*\\\\})\\\\s*from\\\\s*['\\\"]([^'\\\"]+)['\\\"]\",\n absPath,\n ];\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n\n const out = raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .filter((spec) => spec.startsWith(\".\") || spec.startsWith(\"/\"));\n\n cache.set(absPath, out);\n return out;\n};\n\n// Build minimal import-graph distance map from a set of executed tests.\nconst buildDistanceMapFromTests = async (\n executedTestsAbs: readonly string[],\n rootDir: string\n): Promise<Map<string, number>> => {\n const dist = new Map<string, number>();\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const queue: Array<[string, number]> = [];\n const seen = new Set<string>();\n\n for (const testAbs of executedTestsAbs) {\n const testPathNormalized = path.resolve(testAbs).replace(/\\\\/g, \"/\");\n dist.set(testPathNormalized, 0);\n queue.push([testPathNormalized, 0]);\n }\n\n const MAX_DEPTH = 6;\n\n while (queue.length) {\n const nextItem = queue.shift();\n if (!nextItem) {\n break;\n }\n const [currentFile, currentDistance] = nextItem;\n const withinDepth = currentDistance < MAX_DEPTH;\n const notSeen = !seen.has(currentFile);\n const isRepoFile = !currentFile.includes(\"/node_modules/\");\n if (withinDepth && notSeen && isRepoFile) {\n seen.add(currentFile);\n // eslint-disable-next-line no-await-in-loop\n const specs = await extractImportSpecs(currentFile, specsCache);\n const nextDistance = currentDistance + 1;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n currentFile,\n spec,\n rootDir,\n resolutionCache\n );\n const usable = resolved && !resolved.includes(\"/node_modules/\");\n if (usable) {\n const existing = dist.get(resolved!);\n if (existing === undefined || nextDistance < existing) {\n dist.set(resolved!, nextDistance);\n queue.push([resolved!, nextDistance]);\n }\n }\n }\n }\n }\n\n return dist;\n};\n\nexport const renderPerFileCompositeTable = async (opts: {\n readonly absPath: string;\n readonly file: import(\"istanbul-lib-coverage\").FileCoverage;\n readonly root: string;\n readonly maxRows?: number;\n readonly maxHotspots?: number;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const rel = path.relative(opts.root, opts.absPath).replace(/\\\\/g, \"/\");\n const sum = opts.file.toSummary();\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const tableBudget = Math.max(\n 14,\n Math.min(opts.maxRows ?? rowsAvail - 1, rowsAvail + 8)\n );\n const rowBudget = Math.max(6, tableBudget - 6);\n const blocks = computeUncoveredBlocks(opts.file)\n .slice()\n .sort((firstRange, secondRange) => {\n const firstLength = firstRange.end - firstRange.start;\n const secondLength = secondRange.end - secondRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n });\n const missFns = missedFunctions(opts.file);\n const misses = missedBranches(opts.file);\n const total =\n typeof process.stdout.columns === \"number\" && process.stdout.columns > 20\n ? process.stdout.columns\n : 100;\n const fileMax = Math.max(32, Math.floor(total * 0.42));\n const detailMax = Math.max(20, Math.floor(total * 0.22));\n const barMax = Math.max(6, Math.floor(total * 0.06));\n const cols: readonly ColumnSpec[] = [\n { label: \"File\", min: 28, max: fileMax },\n { label: \"Section\", min: 8, max: 10 },\n { label: \"Where\", min: 10, max: 14 },\n { label: \"Lines%\", min: 6, max: 7, align: \"right\" },\n { label: \"Bar\", min: 6, max: barMax },\n { label: \"Funcs%\", min: 6, max: 7, align: \"right\" },\n { label: \"Branch%\", min: 7, max: 8, align: \"right\" },\n { label: \"Detail\", min: 18, max: detailMax },\n ];\n const rows: Cell[][] = [];\n const lPct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const fPct = Number.isFinite(sum.functions.pct) ? sum.functions.pct : 0;\n const bPct = Number.isFinite(sum.branches.pct) ? sum.branches.pct : 0;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(width);\n return linkifyPadded(opts.absPath, undefined, opts.editorCmd)(display);\n }),\n cell(\"Summary\", ansi.bold),\n cell(\"\u2014\"),\n cell(`${lPct.toFixed(1)}%`, tintPct(lPct)),\n cell(\"\".padEnd(10), barCell(compositeBarPct(sum, blocks))),\n cell(`${fPct.toFixed(1)}%`, tintPct(fPct)),\n cell(`${bPct.toFixed(1)}%`, tintPct(bPct)),\n cell(\"\"),\n ]);\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)\n )\n ),\n cell(\"Totals\", ansi.dim),\n cell(\"\u2014\", ansi.dim),\n cell(`${lPct.toFixed(1)}%`, ansi.dim),\n cell(\"\".padEnd(10), (padded) => ansi.dim(padded)),\n cell(`${fPct.toFixed(1)}%`, ansi.dim),\n cell(`${bPct.toFixed(1)}%`, ansi.dim),\n cell(\"\"),\n ]);\n if (blocks.length || missFns.length || misses.length) {\n const wantHs = Math.min(\n typeof opts.maxHotspots === \"number\"\n ? opts.maxHotspots\n : Math.ceil(rowBudget * 0.45),\n blocks.length\n );\n if (wantHs > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Hotspots\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(largest uncovered ranges)\", ansi.dim),\n ]);\n for (const hotspotRange of blocks.slice(0, wantHs)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n hotspotRange.start,\n opts.editorCmd\n )(display);\n }),\n cell(\"Hotspot\"),\n cell(`L${hotspotRange.start}\u2013L${hotspotRange.end}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(`${hotspotRange.end - hotspotRange.start + 1} lines`),\n ]);\n }\n }\n const wantFn = Math.min(Math.ceil(rowBudget * 0.25), missFns.length);\n if (wantFn > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Functions\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(never executed)\", ansi.dim),\n ]);\n for (const missedFunction of missFns.slice(0, wantFn)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedFunction.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Func\"),\n cell(`L${missedFunction.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(missedFunction.name),\n ]);\n }\n }\n const wantBr = Math.min(Math.ceil(rowBudget * 0.2), misses.length);\n if (wantBr > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Branches\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(paths with 0 hits)\", ansi.dim),\n ]);\n for (const missedBranch of misses.slice(0, wantBr)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedBranch.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Branch\"),\n cell(`L${missedBranch.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\n `#${missedBranch.id} missed [${missedBranch.zeroPaths.join(\", \")}]`\n ),\n ]);\n }\n }\n const target = rowBudget;\n if (rows.length < target) {\n const lineQueue: number[] = [];\n for (const hotspotRange of blocks) {\n for (let ln = hotspotRange.start; ln <= hotspotRange.end; ln += 1) {\n lineQueue.push(ln);\n }\n if (lineQueue.length > 5000) {\n break;\n }\n }\n while (rows.length < target && lineQueue.length) {\n const ln = lineQueue.shift()!;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(opts.absPath, ln, opts.editorCmd)(display);\n }),\n cell(\"Line\"),\n cell(`L${ln}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"uncovered\"),\n ]);\n }\n while (rows.length < target) {\n rows.push([\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n ]);\n }\n }\n }\n const table = renderTable(cols, rows);\n console.info(table);\n const sep = ansi.gray(\n \"\u2500\".repeat(\n Math.max(\n 20,\n typeof process.stdout.columns === \"number\"\n ? process.stdout.columns\n : 100\n )\n )\n );\n console.info(sep);\n};\n\nexport const printPerFileCompositeTables = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly pageFit?: boolean;\n readonly maxHotspots?: number;\n readonly selectionPaths?: readonly string[];\n readonly changedFiles?: readonly string[];\n readonly executedTests?: readonly string[];\n readonly editorCmd?: string;\n}): Promise<void> => {\n const selectionAbs = (opts.selectionPaths ?? []).map((selPath) =>\n path.resolve(selPath).replace(/\\\\/g, \"/\")\n );\n const changedAbs = (opts.changedFiles ?? []).map((chgPath) =>\n path.resolve(chgPath).replace(/\\\\/g, \"/\")\n );\n const tokenizeForSimilarity = (filePathForTokens: string) =>\n new Set(\n filePathForTokens\n .toLowerCase()\n .replace(/[^a-z0-9/_\\-.]/g, \" \")\n .split(/[/_.-]+/)\n .filter(Boolean)\n );\n const jaccard = (left: Set<string>, right: Set<string>) => {\n let intersectionCount = 0;\n for (const token of left) {\n if (right.has(token)) {\n intersectionCount += 1;\n }\n }\n const unionSize = left.size + right.size - intersectionCount || 1;\n return intersectionCount / unionSize;\n };\n const isSameDirOrChild = (firstAbs: string, secondAbs: string) => {\n const dirA = path.dirname(firstAbs).replace(/\\\\/g, \"/\");\n const dirB = path.dirname(secondAbs).replace(/\\\\/g, \"/\");\n return (\n dirA === dirB ||\n dirB.startsWith(`${dirA}/`) ||\n dirA.startsWith(`${dirB}/`)\n );\n };\n const selectionTokens = selectionAbs.map(tokenizeForSimilarity);\n const changedTokens = changedAbs.map(tokenizeForSimilarity);\n const executedTestsAbs = (opts.executedTests ?? [])\n .map((testPath) => path.resolve(testPath).replace(/\\\\/g, \"/\"))\n .filter((absPath) => absPath.length > 0);\n const testTokens = executedTestsAbs.map(tokenizeForSimilarity);\n const allMapFilesAbs = opts.map\n .files()\n .map((absPath) => path.resolve(absPath).replace(/\\\\/g, \"/\"));\n const uncoveredCandidates = allMapFilesAbs.filter((absPath) => {\n const sum = opts.map.fileCoverageFor(absPath).toSummary();\n return !(\n sum.lines.pct >= 100 &&\n sum.functions.pct >= 100 &&\n sum.branches.pct >= 100\n );\n });\n let candidates: string[];\n if (selectionAbs.length > 0 || executedTestsAbs.length > 0) {\n // When tests or production paths are explicitly selected, consider ALL covered files,\n // then we'll sort by relevancy to the executed tests/selection below.\n candidates = allMapFilesAbs.slice();\n } else {\n candidates = uncoveredCandidates;\n }\n // Always exclude test-like files from candidates\n candidates = candidates.filter((abs) => !isTestLikePath(abs));\n\n // Compute relevancy of each candidate file to executed tests using import graph distance.\n // Distance tiers: 0=selected file, 1=direct from test, 2+=transitive.\n const INF = 1e9;\n const distFromTests = executedTestsAbs.length\n ? await buildDistanceMapFromTests(executedTestsAbs, opts.root)\n : new Map<string, number>();\n const selectionSetAbs = new Set(selectionAbs);\n\n type Scored = {\n abs: string;\n rel: string;\n linesPct: number;\n group: number;\n score: number;\n distance: number;\n };\n const scored: Scored[] = await Promise.all(\n candidates.map(async (abs): Promise<Scored> => {\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const sum = opts.map.fileCoverageFor(abs).toSummary();\n const pct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const absNorm = path.resolve(abs).replace(/\\\\/g, \"/\");\n const selfTokens = tokenizeForSimilarity(absNorm);\n const selSim = Math.max(\n 0,\n ...selectionTokens.map((selectionTokenSet) =>\n jaccard(selfTokens, selectionTokenSet)\n )\n );\n const chgSim = Math.max(\n 0,\n ...changedTokens.map((changedTokenSet) =>\n jaccard(selfTokens, changedTokenSet)\n )\n );\n const tstSim = Math.max(\n 0,\n ...testTokens.map((tset) => jaccard(selfTokens, tset))\n );\n const nearSelection = selectionAbs.some((selectionPath) =>\n isSameDirOrChild(absNorm, selectionPath)\n );\n const nearChanged = changedAbs.some((changedPath) =>\n isSameDirOrChild(absNorm, changedPath)\n );\n const related = selSim > 0 || chgSim > 0 || nearSelection || nearChanged;\n\n // Use precomputed distance\n const distance = selectionSetAbs.has(absNorm)\n ? 0\n : distFromTests.get(absNorm) ?? INF;\n\n let group = 6;\n if (selectionSetAbs.has(absNorm)) {\n group = 0; // selected prod file\n } else if (distance === 1) {\n group = 1; // directly imported by tests\n } else if (distance >= 2 && distance <= 3) {\n group = 2; // nearby transitive\n } else if (distance < INF) {\n group = 3; // distant transitive\n } else if (related) {\n group = 4; // path-similar only\n } else if (pct > 0) {\n group = 5; // executed but not in graph\n } else {\n group = 6;\n }\n\n // similarity to selection/changed/tests, with slight demotion for config/\n const prefixPenalty = rel.startsWith(\"config/\") ? -100 : 0;\n const score =\n Math.round(selSim * 10) +\n Math.round(chgSim * 5) +\n Math.round(tstSim * 12) +\n prefixPenalty;\n return { abs: absNorm, rel, linesPct: pct, group, score, distance };\n })\n );\n let files = scored\n .sort(\n (left, right) =>\n left.group - right.group ||\n left.distance - right.distance ||\n right.score - left.score ||\n right.linesPct - left.linesPct ||\n left.rel.localeCompare(right.rel)\n )\n .map((scoredItem) => scoredItem.abs);\n // Move directly selected production files to the very top (if present)\n if (selectionAbs.length > 0) {\n const selectionSet = new Set(selectionAbs);\n const selectedHead = files.filter((filePath) => selectionSet.has(filePath));\n const nonSelected = files.filter((filePath) => !selectionSet.has(filePath));\n files = [...selectedHead, ...nonSelected];\n }\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const perFileRows = opts.pageFit\n ? Math.max(14, rowsAvail - 1)\n : rowsAvail + 8;\n for (const absolutePath of [...files].reverse()) {\n const fileCoverage = opts.map.fileCoverageFor(absolutePath);\n // Print least-relevant first, highest priority last (nearest the summary table)\n // and keep output order stable.\n // eslint-disable-next-line no-await-in-loop\n await renderPerFileCompositeTable({\n absPath: absolutePath,\n file: fileCoverage,\n root: opts.root,\n maxRows: perFileRows,\n ...(typeof opts.maxHotspots === \"number\"\n ? { maxHotspots: opts.maxHotspots }\n : {}),\n editorCmd: opts.editorCmd ?? \"\",\n });\n }\n};\n", "export const ansi = {\n bold: (text: string) => `\\u001b[1m${text}\\u001b[22m`,\n dim: (text: string) => `\\u001b[2m${text}\\u001b[22m`,\n black: (text: string) => `\\u001b[30m${text}\\u001b[39m`,\n red: (text: string) => `\\u001b[31m${text}\\u001b[39m`,\n yellow: (text: string) => `\\u001b[33m${text}\\u001b[39m`,\n green: (text: string) => `\\u001b[32m${text}\\u001b[39m`,\n magenta: (text: string) => `\\u001b[35m${text}\\u001b[39m`,\n gray: (text: string) => `\\u001b[90m${text}\\u001b[39m`,\n cyan: (text: string) => `\\u001b[36m${text}\\u001b[39m`,\n white: (text: string) => `\\u001b[97m${text}\\u001b[39m`,\n bgRed: (text: string) => `\\u001b[41m${text}\\u001b[49m`,\n bgGreen: (text: string) => `\\u001b[42m${text}\\u001b[49m`,\n bgMagenta: (text: string) => `\\u001b[45m${text}\\u001b[49m`,\n bgCyan: (text: string) => `\\u001b[46m${text}\\u001b[49m`,\n bgGray: (text: string) => `\\u001b[100m${text}\\u001b[49m`,\n} as const;\n\nexport const supportsUnicode = (): boolean => {\n const term = String(process.env.TERM ?? '').toLowerCase();\n const wtSession = process.env.WT_SESSION ?? '';\n return Boolean(wtSession) || (Boolean(term) && term !== 'dumb');\n};\n\nexport const osc8 = (text: string, url: string) => `\\u001B]8;;${url}\\u0007${text}\\u001B]8;;\\u0007`;\n", "export type Colorize = (text: string) => string;\n\nconst useColor = Boolean(\n process.stdout.isTTY && !(process.env as unknown as { NO_COLOR?: string }).NO_COLOR,\n);\nconst maybe =\n (fn: Colorize): Colorize =>\n (text) =>\n useColor ? fn(text) : text;\n\nexport const colorRgb = (red: number, green: number, blue: number): Colorize =>\n maybe((text) => `\\x1b[38;2;${red};${green};${blue}m${text}\\x1b[0m`);\n\nconst HEX_SHORT_LENGTH = 3;\nconst HEX_SLICE = {\n redStart: 0,\n redEnd: 2,\n greenStart: 2,\n greenEnd: 4,\n blueStart: 4,\n blueEnd: 6,\n} as const;\n\nconst parseHex = (hex: string): { red: number; green: number; blue: number } => {\n const normalized = hex.replace(/^#/, '').trim();\n const isShort = normalized.length === HEX_SHORT_LENGTH;\n const full = isShort\n ? normalized\n .split('')\n .map((char) => char + char)\n .join('')\n : normalized;\n const red = parseInt(full.slice(HEX_SLICE.redStart, HEX_SLICE.redEnd), 16);\n const green = parseInt(full.slice(HEX_SLICE.greenStart, HEX_SLICE.greenEnd), 16);\n const blue = parseInt(full.slice(HEX_SLICE.blueStart, HEX_SLICE.blueEnd), 16);\n return { red, green, blue };\n};\n\nexport const colorHex = (hex: string): Colorize => {\n const { red, green, blue } = parseHex(hex);\n return colorRgb(red, green, blue);\n};\n\nexport const Colors = {\n Success: colorHex('#22c55e'),\n Warn: colorHex('#eab308'),\n Failure: colorHex('#ff2323'),\n Run: colorHex('#3b82f6'),\n Skip: colorHex('#eab308'),\n Todo: colorHex('#38bdf8'),\n} as const;\n\nexport const backgroundRgb = (red: number, green: number, blue: number): Colorize =>\n maybe((text) => `\\x1b[48;2;${red};${green};${blue}m${text}\\x1b[0m`);\n\nexport const bgColorHex = (hex: string): Colorize => {\n const { red, green, blue } = parseHex(hex);\n return backgroundRgb(red, green, blue);\n};\n\nexport const BackgroundColors = {\n Success: bgColorHex('#22c55e'),\n Warn: bgColorHex('#eab308'),\n Failure: bgColorHex('#ff2323'),\n Run: bgColorHex('#3b82f6'),\n Skip: bgColorHex('#eab308'),\n Todo: bgColorHex('#38bdf8'),\n} as const;\n", "import { ansi, supportsUnicode } from './ansi';\nimport { Colors } from './colors';\n\nconst SUCCESS_THRESHOLD = 85;\nconst WARNING_THRESHOLD = 60;\nconst PERCENT_MAX = 100;\nconst DEFAULT_BAR_WIDTH = 14;\n\n// NOTE: keep local color helpers minimal in this module; shared palette lives in colors.ts\n\nexport const tintPct = (pct: number): ((s: string) => string) => {\n if (pct >= SUCCESS_THRESHOLD) {\n return Colors.Success;\n }\n if (pct >= WARNING_THRESHOLD) {\n return Colors.Warn;\n }\n return Colors.Failure;\n};\n\nexport const bar = (pct: number, width = DEFAULT_BAR_WIDTH): string => {\n const filled = Math.round((pct / PERCENT_MAX) * width);\n const solid = supportsUnicode() ? '\u2588' : '#';\n const empty = supportsUnicode() ? '\u2591' : '-';\n const good = tintPct(pct);\n const MIN_REMAINING = 0;\n return `${good(solid.repeat(filled))}${ansi.gray(\n empty.repeat(Math.max(MIN_REMAINING, width - filled)),\n )}`;\n};\n", "import { ansi } from './ansi';\nimport { bar } from './bars';\n\nexport type ColumnSpec = {\n readonly label: string;\n readonly min: number;\n readonly max: number;\n readonly align?: 'left' | 'right';\n};\nexport type Cell = { readonly raw: string; readonly decorate?: (s: string) => string };\n\nexport const cell = (raw: string, decorate?: (s: string) => string): Cell =>\n decorate ? { raw, decorate } : { raw };\n\nconst padVisible = (text: string, width: number, align: 'left' | 'right') => {\n if (text.length === width) {\n return text;\n }\n if (text.length < width) {\n return align === 'right'\n ? ' '.repeat(width - text.length) + text\n : text + ' '.repeat(width - text.length);\n }\n return text.slice(0, Math.max(0, width));\n};\n\nconst border = {\n v: '\u2502',\n h: '\u2500',\n tl: '\u250C',\n tr: '\u2510',\n bl: '\u2514',\n br: '\u2518',\n jt: '\u252C',\n jb: '\u2534',\n jc: '\u253C',\n} as const;\n\nexport const renderTable = (\n columns: readonly ColumnSpec[],\n rows: ReadonlyArray<readonly Cell[]>,\n) => {\n const total =\n typeof process.stdout.columns === 'number' ? Math.max(process.stdout.columns, 60) : 100;\n const mins = columns.map((columnSpec) => columnSpec.min);\n const maxs = columns.map((columnSpec) => columnSpec.max);\n const borders = columns.length + 1;\n const budget = Math.max(1, total - borders);\n\n let widths = mins.slice();\n const minSum = mins.reduce((accumulated, value) => accumulated + value, 0);\n const maxSum = maxs.reduce((accumulated, value) => accumulated + value, 0);\n\n if (minSum > budget) {\n const factor = budget / minSum;\n widths = mins.map((minForColumn) => Math.max(1, Math.floor(minForColumn * factor)));\n let leftover = budget - widths.reduce((accumulated, widthValue) => accumulated + widthValue, 0);\n for (let i = 0; leftover > 0 && i < widths.length; i += 1) {\n widths[i]! += 1;\n leftover -= 1;\n }\n } else {\n let remaining = Math.min(budget, maxSum) - minSum;\n for (let i = 0; i < widths.length && remaining > 0; i += 1) {\n const maximumWidthAtIndex = maxs[i] ?? 0;\n const currentWidthAtIndex = widths[i] ?? 0;\n const grow = Math.min(remaining, Math.max(0, maximumWidthAtIndex - currentWidthAtIndex));\n widths[i] = currentWidthAtIndex + grow;\n remaining -= grow;\n }\n }\n\n const hr = (left: string, mid: string, right: string) =>\n `${left}${widths.map((columnWidth) => '\u2500'.repeat(columnWidth)).join(mid)}${right}`;\n const hrTop = hr(border.tl, border.jt, border.tr);\n const hrSep = hr(border.jc, border.jc, border.jc);\n const hrBot = hr(border.bl, border.jb, border.br);\n\n const header = `${border.v}${columns\n .map((col, i) => ansi.bold(padVisible(col.label, widths[i]!, col.align ?? 'left')))\n .join(border.v)}${border.v}`;\n\n const lines = rows.map((row) => {\n const cells = row.map((cellObj, i) => {\n const txt = padVisible(cellObj.raw, widths[i]!, columns[i]!.align ?? 'left');\n return typeof cellObj.decorate === 'function' ? cellObj.decorate(txt) : txt;\n });\n return `${border.v}${cells.join(border.v)}${border.v}`;\n });\n\n return [hrTop, header, hrSep, ...lines, hrBot].join('\\n');\n};\n\nexport const barCell = (pct: number) => (padded: string) => bar(pct, padded.length);\n", "/* eslint-disable no-continue */\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as util from 'node:util';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport JSON5 from 'json5';\n\nimport { ansi, osc8 } from './ansi';\nimport { Colors, BackgroundColors } from './colors';\nimport { preferredEditorHref } from './paths';\nimport { collapseStacks, firstTestLocation, isStackLine, stripAnsiSimple } from './stacks';\n\n// near imports (fs already imported) \u2014 helper to find the last bridge JSON path\nconst extractBridgePath = (raw: string, cwd: string): string | null => {\n const matches = Array.from(\n raw.matchAll(/Test results written to:\\s+([^\\n\\r]+jest-bridge-[^\\s'\"]+\\.json)/g),\n );\n if (!matches.length) {\n return null;\n }\n const jsonPath = matches[matches.length - 1]![1]!.trim().replace(/^[\"'`]|[\"'`]$/g, '');\n return path.isAbsolute(jsonPath) ? jsonPath : path.resolve(cwd, jsonPath);\n};\n\n// Vitest-like formatter helpers\nexport const drawRule = (label?: string): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n if (!label) {\n return ansi.dim('\u2500'.repeat(width));\n }\n const plain = stripAnsiSimple(label);\n const pad = Math.max(1, width - plain.length - 1);\n return `${ansi.dim('\u2500'.repeat(pad))} ${label}`;\n};\n\ntype KnownEnv = NodeJS.ProcessEnv & {\n TEST_CLI_STACKS?: string;\n TEST_CLI_SUMMARY?: string;\n TEST_CLI_SHOW_CONSOLE?: string;\n NO_COLOR?: string;\n};\nconst env = process.env as unknown as KnownEnv;\n\nconst colorTokens = {\n pass: Colors.Success,\n fail: Colors.Failure,\n run: Colors.Run,\n skip: Colors.Skip,\n todo: Colors.Todo,\n passPill: (text: string) => BackgroundColors.Success(ansi.white(` ${text} `)),\n failPill: (text: string) => BackgroundColors.Failure(ansi.white(` ${text} `)),\n runPill: (text: string) => BackgroundColors.Run(ansi.white(` ${text} `)),\n};\n\nconst MAX_CONSOLE_ERRORS_TO_SHOW = 3;\n\n// Pretty diff helpers\nconst isArrayOfPrimitives = (value: unknown): value is Array<string | number | boolean | null> =>\n Array.isArray(value) &&\n value.every(\n (element) => ['string', 'number', 'boolean'].includes(typeof element) || element === null,\n );\n\ntype DiffPayload = { expected?: unknown; received?: unknown };\n\n// Normalize and indentation helpers for prettier-style rendering\nexport const indentBlock = (text: string, pad = ' '): string =>\n text\n .split('\\n')\n .map((line) => (line ? pad + line : pad.trimEnd()))\n .join('\\n');\n\nexport const prettifyPrettyFormatBlock = (raw: string): string => {\n const lines = raw.split('\\n');\n if (!lines.length) {\n return raw;\n }\n\n // Accept both pretty-format and already-normalized blocks\n const first = lines[0] ?? '';\n const isArrayStart = /^\\s*(?:Array\\s*\\[|\\[)\\s*$/.test(first);\n const isObjectStart = /^\\s*(?:Object\\s*\\{|\\{)\\s*$/.test(first);\n if (!isArrayStart && !isObjectStart) {\n return raw;\n }\n\n // Normalize the opener\n lines[0] = first\n .replace(/^(\\s*)Array\\s*\\[/, '$1[')\n .replace(/^(\\s*)Object\\s*\\{/, '$1{')\n .replace(/^\\s*\\[\\s*$/, '[')\n .replace(/^\\s*\\{\\s*$/, '{');\n\n const closingChar = isArrayStart ? ']' : '}';\n // Find the closing line\n let closeIdx = -1;\n for (let i = 1; i < lines.length; i += 1) {\n if (/^\\s*[\\]}]\\s*$/.test(lines[i]!)) {\n closeIdx = i;\n break;\n }\n }\n if (closeIdx < 0) {\n return lines.join('\\n');\n }\n\n const inner = lines.slice(1, closeIdx);\n\n // Compute the baseline indent across non-empty inner lines\n const indents: number[] = [];\n for (const lineText of inner) {\n if (lineText.trim().length === 0) {\n continue;\n }\n indents.push(lineText.match(/^\\s*/)?.[0]?.length ?? 0);\n }\n const minIndent = indents.length ? Math.min(...indents) : 0;\n\n // Re-indent so the *minimum* inner indent becomes exactly two spaces,\n // preserving relative nesting deeper than that.\n const reindented = inner.map((lineText, idx) => {\n if (lineText.trim().length === 0) {\n return lineText;\n } // keep blank lines blank\n const current = lineText.match(/^\\s*/)?.[0]?.length ?? 0;\n const rest = lineText.slice(current);\n const extra = Math.max(0, current - minIndent);\n const base = ' '; // Prettier-style 2-space base\n // Optionally remove trailing comma on the last inner item to be more Prettier-like\n const withoutDangling = idx === inner.length - 1 ? rest.replace(/,\\s*$/, '') : rest;\n return base + ' '.repeat(extra) + withoutDangling;\n });\n\n // Normalize the closer to be flush with the opener (no extra inner spaces)\n lines.splice(1, inner.length, ...reindented);\n lines[closeIdx] = closingChar;\n\n return lines.join('\\n');\n};\n\nconst normalizeBlock = (raw: string) =>\n raw\n .replace(/^\\s*Array\\s*\\[/, '[')\n .replace(/^\\s*Object\\s*\\{/, '{')\n // remove dangling commas just before ] or }\n .replace(/,(\\s*[\\]}])/g, '$1');\n\nexport const stringifyPrettierish = (value: unknown): string => {\n // strings coming from Jest diff\n if (typeof value === 'string') {\n const text = normalizeBlock(value.trim());\n if (/^[[{]/.test(text)) {\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n /* fall through */\n }\n }\n return value;\n }\n // real data: arrays/objects\n if (Array.isArray(value) || (value && typeof value === 'object')) {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n /* circulars etc \u2014 fall through */\n }\n }\n // everything else\n return util.inspect(value, { depth: 10, breakLength: Infinity, compact: false, sorted: true });\n};\n\nexport const drawFailRule = (label = ' FAIL '): string => drawRule(colorTokens.failPill(label));\n\n// NEW: plain red line rule (no label), matching Vitest section rules\nexport const drawFailLine = (): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n return colorTokens.fail('\u2500'.repeat(width));\n};\n\nexport const renderRunLine = (cwd: string): string =>\n `${colorTokens.runPill('RUN')} ${ansi.dim(cwd.replace(/\\\\/g, '/'))}`;\n\nexport const colorStackLine = (line: string, projectHint: RegExp): string => {\n const plainLine = stripAnsiSimple(line);\n if (!isStackLine(plainLine)) {\n return plainLine;\n }\n const match = plainLine.match(/\\(?([^\\s()]+):(\\d+):(\\d+)\\)?$/);\n if (!match) {\n return ansi.dim(plainLine);\n }\n const file = match[1]!.replace(/\\\\/g, '/');\n const lineNumber = match[2]!;\n const columnNumber = match[3]!;\n const coloredPath = projectHint.test(file) ? ansi.cyan(file) : ansi.dim(file);\n return plainLine.replace(\n match[0]!,\n `(${coloredPath}${ansi.dim(':')}${ansi.white(`${lineNumber}:${columnNumber}`)})`,\n );\n};\n\nexport const renderCodeFrame = (lines: readonly string[], start: number): string[] => {\n const out: string[] = [];\n for (let i = start; i < lines.length; i += 1) {\n const raw = stripAnsiSimple(lines[i]!);\n if (!raw.trim()) {\n break;\n }\n if (/^\\s*\\^+\\s*$/.test(raw)) {\n out.push(` ${colorTokens.fail(raw.trimEnd())}`);\n continue;\n }\n const pointerMatch = raw.match(/^\\s*>(\\s*\\d+)\\s*\\|\\s?(.*)$/);\n if (pointerMatch) {\n const num = ansi.dim(pointerMatch[1]!.trim());\n const code = ansi.yellow(pointerMatch[2] ?? '');\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n const normalMatch = raw.match(/^\\s*(\\d+)\\s*\\|\\s?(.*)$/);\n if (normalMatch) {\n const num = ansi.dim(normalMatch[1]!);\n const code = ansi.dim(normalMatch[2] ?? '');\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n out.push(` ${raw}`);\n }\n return out;\n};\n\n// NEW: read file lines cache + synthesized codeframe\nconst _sourceCache = new Map<string, string[]>();\nconst readSource = (file: string): string[] => {\n const normalizedFile = file.replace(/\\\\/g, '/');\n const cached = _sourceCache.get(normalizedFile);\n if (cached) {\n return cached;\n }\n try {\n const txt = fs.readFileSync(normalizedFile, 'utf8');\n const arr = txt.split(/\\r?\\n/);\n _sourceCache.set(normalizedFile, arr);\n return arr;\n } catch {\n return [];\n }\n};\n\nexport const renderSourceCodeFrame = (file: string, line: number, context = 3): string[] => {\n const lines = readSource(file);\n if (!lines.length || !Number.isFinite(line)) {\n return [];\n }\n const idx = Math.max(1, Math.min(line, lines.length));\n const start = Math.max(1, idx - context);\n const end = Math.min(lines.length, idx + context);\n\n const out: string[] = [];\n for (let currentLineNumber = start; currentLineNumber <= end; currentLineNumber += 1) {\n const num = ansi.dim(String(currentLineNumber));\n const code =\n currentLineNumber === idx\n ? ansi.yellow(lines[currentLineNumber - 1] ?? '')\n : ansi.dim(lines[currentLineNumber - 1] ?? '');\n if (currentLineNumber === idx) {\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n }\n }\n out.push(` ${colorTokens.fail('^')}`);\n return out;\n};\n\n// PATCH: deepest project frame (last match in the stack)\nconst findLastProjectFrameIndex = (lines: readonly string[], projectHint: RegExp): number => {\n for (let i = lines.length - 1; i >= 0; i -= 1) {\n const simple = stripAnsiSimple(lines[i]!);\n if (\n isStackLine(simple) &&\n projectHint.test(simple) &&\n !/node_modules|vitest|jest/.test(simple)\n ) {\n return i;\n }\n }\n return -1;\n};\n\n// NEW: short stack tail (last N frames), colored\nconst renderStackTail = (lines: readonly string[], projectHint: RegExp, max = 4): string[] => {\n const onlyStack = lines.filter((candidateLine) => isStackLine(stripAnsiSimple(candidateLine)));\n if (!onlyStack.length) {\n return [];\n }\n const tail = onlyStack.slice(-max);\n return tail.map((frameLine) => ` ${colorStackLine(frameLine, projectHint)}`);\n};\n\n// NEW: first N project frames from the stack (top-down)\nconst firstProjectFrames = (lines: readonly string[], projectHint: RegExp, max = 2): string[] => {\n const onlyStack = lines.filter((ln) => isStackLine(stripAnsiSimple(ln)));\n const projectOnly = onlyStack.filter((ln) => projectHint.test(stripAnsiSimple(ln)));\n return projectOnly.slice(0, max).map((ln) => ` ${colorStackLine(ln, projectHint)}`);\n};\n\n// NEW: extract assertion message (matcher hint + Expected/Received/diff)\nconst isTerminator = (lineText: string) => !lineText.trim() || isStackLine(lineText);\n\nexport const extractAssertionMessage = (msgLines: readonly string[]): string[] => {\n const lines = msgLines.map((rawLine: string) => stripAnsiSimple(rawLine));\n const out: string[] = [];\n\n const hintIdx = lines.findIndex(\n (candidateLine: string) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(candidateLine) ||\n /\\b(?:AssertionError|Error):/.test(candidateLine),\n );\n if (hintIdx >= 0) {\n out.push(lines[hintIdx]!);\n }\n\n const collectBlock = (start: number) => {\n out.push(lines[start]!);\n for (let i = start + 1; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n };\n\n const expectedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Expected:/.test(candidateLine),\n );\n const receivedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Received:/.test(candidateLine),\n );\n const diffIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*(?:- Expected|\\+ Received|Difference:)/.test(candidateLine),\n );\n\n if (expectedIdx >= 0) {\n collectBlock(expectedIdx);\n }\n if (receivedIdx >= 0) {\n collectBlock(receivedIdx);\n }\n if (diffIdx >= 0) {\n collectBlock(diffIdx);\n }\n\n // fallback: grab up to 4 non-stack lines after hint\n if (out.length === 0 && hintIdx >= 0) {\n for (let i = hintIdx + 1; i < lines.length && out.length < 4; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n }\n return out;\n};\n\n// PATCH: convert a single stack line to \"file:line\" (for editor link)\nconst stackLocation = (line: string): { file: string; line: number } | null => {\n const match = stripAnsiSimple(line).match(/\\(?([^\\s()]+):(\\d+):\\d+\\)?$/);\n return match ? { file: match[1]!.replace(/\\\\/g, '/'), line: Number(match[2]!) } : null;\n};\nexport const JEST_BRIDGE_REPORTER_SOURCE = `const fs = require('fs');\nconst path = require('path');\n\nclass BridgeReporter {\n constructor(globalConfig, options) {\n this.out = process.env.JEST_BRIDGE_OUT || (options && options.outFile) || path.join(process.cwd(), 'coverage', 'jest-run.json');\n this.buf = { startTime: Date.now(), testResults: [], aggregated: null };\n }\n onRunStart() { this.buf.startTime = Date.now(); }\n onTestResult(_test, tr) {\n const mapAssertion = (a) => ({\n title: a.title,\n fullName: a.fullName || [...(a.ancestorTitles || []), a.title].join(' '),\n status: a.status,\n duration: a.duration || 0,\n location: a.location || null,\n failureMessages: (a.failureMessages || []).map(String),\n });\n this.buf.testResults.push({\n testFilePath: tr.testFilePath,\n status: tr.numFailingTests ? 'failed' : 'passed',\n failureMessage: tr.failureMessage || '',\n failureDetails: tr.failureDetails || [],\n console: tr.console || null,\n perfStats: tr.perfStats || {},\n testResults: (tr.testResults || []).map(mapAssertion),\n });\n }\n onRunComplete(_contexts, agg) {\n this.buf.aggregated = {\n numTotalTestSuites: agg.numTotalTestSuites,\n numPassedTestSuites: agg.numPassedTestSuites,\n numFailedTestSuites: agg.numFailedTestSuites,\n numTotalTests: agg.numTotalTests,\n numPassedTests: agg.numPassedTests,\n numFailedTests: agg.numFailedTests,\n numPendingTests: agg.numPendingTests,\n numTodoTests: agg.numTodoTests,\n startTime: agg.startTime,\n success: agg.success,\n runTimeMs: agg.testResults.reduce((t, r) => t + Math.max(0, (r.perfStats?.end || 0) - (r.perfStats?.start || 0)), 0),\n };\n fs.mkdirSync(path.dirname(this.out), { recursive: true });\n fs.writeFileSync(this.out, JSON.stringify(this.buf), 'utf8');\n }\n}\nmodule.exports = BridgeReporter;`;\n\ntype Dict = Record<string, unknown>;\n\nconst asDict = (value: unknown): Dict | null =>\n value && typeof value === 'object' ? (value as Dict) : null;\n\nconst get = (objectValue: Dict | null, key: string): unknown =>\n objectValue ? objectValue[key] : undefined;\n\nconst getStr = (objectValue: Dict | null, key: string): string | undefined => {\n const candidate = get(objectValue, key);\n return typeof candidate === 'string' ? candidate : undefined;\n};\n\nexport function linesFromDetails(details: readonly unknown[] | undefined): {\n stacks: string[];\n messages: string[];\n} {\n const stacks: string[] = [];\n const messages: string[] = [];\n if (!details) {\n return { stacks, messages };\n }\n\n const pushMaybe = (value: unknown, bucket: string[]) => {\n if (typeof value === 'string' && value.trim()) {\n bucket.push(...value.split(/\\r?\\n/));\n }\n };\n\n for (const detail of details) {\n if (typeof detail === 'string') {\n if (/\\s+at\\s.+\\(.+:\\d+:\\d+\\)/.test(detail)) {\n pushMaybe(detail, stacks);\n } else {\n pushMaybe(detail, messages);\n }\n continue;\n }\n const dict = asDict(detail);\n if (dict) {\n pushMaybe(getStr(dict, 'stack'), stacks);\n pushMaybe(getStr(dict, 'message'), messages);\n\n const err = asDict(get(dict, 'error'));\n pushMaybe(getStr(err, 'stack'), stacks);\n pushMaybe(getStr(err, 'message'), messages);\n\n const matcherResult = asDict(get(dict, 'matcherResult'));\n pushMaybe(getStr(matcherResult, 'stack'), stacks);\n pushMaybe(getStr(matcherResult, 'message'), messages);\n pushMaybe(getStr(matcherResult, 'expected'), messages);\n pushMaybe(getStr(matcherResult, 'received'), messages);\n }\n }\n return { stacks, messages };\n}\n\n// NEW: choose a label that matches the payload\nexport function labelForMessage(lines: readonly string[]): string {\n const joined = lines.join(' ');\n const matched =\n joined.match(/\\b(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/) ||\n joined.match(/\\bError\\b/);\n if (matched) {\n const typeName = (matched[1] as string | undefined) ?? 'Error';\n return `${typeName}:`;\n }\n return /expect\\(.+?\\)\\.(?:to|not\\.)/.test(joined) ? 'Assertion:' : 'Message:';\n}\n\n/** Try to pull rich expected/received from\n * failureDetails.matcherResult; else sniff from message lines */\nexport function extractExpectedReceived(\n details?: readonly unknown[],\n lines?: readonly string[],\n): DiffPayload {\n if (details) {\n for (const detail of details) {\n const dict = asDict(detail);\n const matcherResult = dict && asDict(get(dict, 'matcherResult'));\n if (matcherResult) {\n const expected = get(matcherResult, 'expected');\n const received = get(matcherResult, 'received');\n if (expected !== undefined || received !== undefined) {\n return { expected, received };\n }\n }\n }\n }\n if (lines && lines.length) {\n const expectedLines: string[] = [];\n const receivedLines: string[] = [];\n let mode: 'none' | 'exp' | 'rec' = 'none';\n for (const rawLine of lines) {\n const simple = stripAnsiSimple(rawLine);\n if (/^\\s*Expected:/.test(simple)) {\n mode = 'exp';\n expectedLines.push(simple.replace(/^\\s*Expected:\\s*/, ''));\n continue;\n }\n if (/^\\s*Received:/.test(simple)) {\n mode = 'rec';\n receivedLines.push(simple.replace(/^\\s*Received:\\s*/, ''));\n continue;\n }\n if (/^\\s*[-+]\\s/.test(simple)) {\n continue;\n }\n if (!simple.trim()) {\n mode = 'none';\n } else if (mode === 'exp') {\n expectedLines.push(simple);\n } else if (mode === 'rec') {\n receivedLines.push(simple);\n }\n }\n if (expectedLines.length || receivedLines.length) {\n return { expected: expectedLines.join('\\n'), received: receivedLines.join('\\n') };\n }\n const unified = extractFromUnifiedDiff(lines);\n if (unified.expected !== undefined || unified.received !== undefined) {\n return unified;\n }\n }\n return {};\n}\n\nexport function extractFromUnifiedDiff(rawLines: readonly string[]): {\n expected?: string;\n received?: string;\n} {\n const lines = rawLines.map((lineText) => stripAnsiSimple(lineText));\n\n // Find the first pretty-format block start, signed or unsigned\n let startIndex = -1;\n for (let i = 0; i < lines.length; i += 1) {\n const lt = lines[i]!;\n if (/^\\s*(?:[-+]\\s*)?(Array\\s*\\[|Object\\s*\\{)/.test(lt)) {\n startIndex = i;\n break;\n }\n }\n if (startIndex < 0) {\n return {};\n }\n\n const expectedParts: string[] = [];\n const receivedParts: string[] = [];\n\n let opened = false;\n let expDone = false;\n let recDone = false;\n const canParseJsonish = (input: string): boolean => {\n const text = normalizeBlock(input).trim();\n try {\n JSON5.parse(text);\n return true;\n } catch {\n return false;\n }\n };\n\n for (let i = startIndex; i < lines.length; i += 1) {\n const lineText = lines[i]!;\n const unsigned = lineText.replace(/^\\s*[-+]\\s?/, '');\n const isMinus = /^\\s*-\\s/.test(lineText);\n const isPlus = /^\\s*\\+\\s/.test(lineText);\n\n if (!opened) {\n const looksLikeStart = /^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(unsigned);\n if (!looksLikeStart) {\n // Skip unrelated lines before the pretty block\n continue;\n }\n opened = true;\n }\n\n if (isMinus) {\n expectedParts.push(unsigned);\n } else if (isPlus) {\n receivedParts.push(unsigned);\n } else {\n expectedParts.push(unsigned);\n receivedParts.push(unsigned);\n }\n\n if (!expDone && expectedParts.length > 0) {\n const expJoined = expectedParts.join('\\n');\n expDone = canParseJsonish(expJoined);\n }\n if (!recDone && receivedParts.length > 0) {\n const recJoined = receivedParts.join('\\n');\n recDone = canParseJsonish(recJoined);\n }\n if (opened && expDone && recDone) {\n break;\n }\n }\n\n const toJsonLikeString = (joined: string | undefined): string | undefined => {\n if (!joined) {\n return undefined;\n }\n const text = normalizeBlock(joined).trim();\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return text;\n }\n };\n\n const expected = expectedParts.length ? expectedParts.join('\\n') : undefined;\n const received = receivedParts.length ? receivedParts.join('\\n') : undefined;\n const result: { expected?: string; received?: string } = {};\n const expStr = toJsonLikeString(expected);\n const recStr = toJsonLikeString(received);\n if (expStr !== undefined) {\n result.expected = expStr;\n }\n if (recStr !== undefined) {\n result.received = recStr;\n }\n return result;\n}\n\nfunction renderPrettyDiff(payload: DiffPayload): string[] {\n const out: string[] = [];\n const { expected, received } = payload;\n if (expected === undefined && received === undefined) {\n return out;\n }\n\n const expectedString = stringifyPrettierish(expected);\n const receivedString = stringifyPrettierish(received);\n\n out.push(\n ` ${ansi.bold('Expected')} ${ansi.dim(\n expected && Array.isArray(expected) ? `(len ${(expected as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.pass(expectedString)));\n out.push(\n ` ${ansi.bold('Received')} ${ansi.dim(\n received && Array.isArray(received) ? `(len ${(received as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.fail(receivedString)));\n\n if (isArrayOfPrimitives(expected) && isArrayOfPrimitives(received)) {\n const expectedSet = new Set(expected.map((element) => String(element)));\n const receivedSet = new Set(received.map((element) => String(element)));\n const missing = [...expectedSet].filter((element) => !receivedSet.has(element));\n const unexpected = [...receivedSet].filter((element) => !expectedSet.has(element));\n const parts: string[] = [];\n if (missing.length) {\n parts.push(\n `${missing.length} missing: ${missing\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${missing.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (unexpected.length) {\n parts.push(\n `${unexpected.length} unexpected: ${unexpected\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${unexpected.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (parts.length) {\n out.push(` ${ansi.dim('Difference:')} ${colorTokens.fail(parts.join(ansi.dim(' | ')))}`);\n }\n }\n\n out.push('');\n return out;\n}\n\nfunction pickPrimaryMessage(\n candidateMessageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n): string[] {\n const extracted = extractAssertionMessage(candidateMessageLines);\n if (extracted.length) {\n return extracted;\n }\n const errorLine = details.messages.find((lineText) =>\n /\\b(?:Error|TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/.test(lineText),\n );\n if (errorLine) {\n return [errorLine];\n }\n const firstNonEmpty = details.messages.find((lineText) => lineText.trim().length);\n if (firstNonEmpty) {\n return [firstNonEmpty];\n }\n return [];\n}\n\nfunction colorUnifiedDiffLine(simple: string): string {\n if (/^\\s*-\\s/.test(simple)) {\n return colorTokens.fail(simple);\n }\n if (/^\\s*\\+\\s/.test(simple)) {\n return colorTokens.pass(simple);\n }\n return simple;\n}\n\nexport type Loc = { file: string; line: number };\n\nexport type BuildCtx = {\n readonly projectHint: RegExp;\n readonly editorCmd: string | undefined;\n readonly showStacks: boolean;\n};\n\nexport const findCodeFrameStart = (lines: readonly string[]): number =>\n lines.findIndex((line) => /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(line)));\n\nexport const deepestProjectLoc = (\n stackLines: readonly string[],\n projectHint: RegExp,\n): Loc | null => {\n const idx = findLastProjectFrameIndex(stackLines, projectHint);\n return idx >= 0 ? stackLocation(stackLines[idx]!) : null;\n};\n\nexport const buildCodeFrameSection = (\n messageLines: readonly string[],\n ctx: BuildCtx,\n synthLoc?: Loc | null,\n): string[] => {\n const lines: string[] = [];\n const start = findCodeFrameStart(messageLines);\n if (start >= 0) {\n lines.push(...renderCodeFrame(messageLines, start), '');\n return lines;\n }\n if (ctx.showStacks && synthLoc) {\n lines.push(...renderSourceCodeFrame(synthLoc.file, synthLoc.line), '');\n }\n return lines;\n};\n\nexport const buildPrettyDiffSection = (\n details?: readonly unknown[],\n messageLines?: readonly string[],\n): string[] => renderPrettyDiff(extractExpectedReceived(details, messageLines));\n\nexport const buildMessageSection = (\n messageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n ctx: BuildCtx,\n opts?: { suppressDiff?: boolean; stackPreview?: readonly string[] },\n): string[] => {\n const out: string[] = [];\n\n const primary = pickPrimaryMessage(messageLines, details);\n\n const filtered = opts?.suppressDiff\n ? primary.filter((raw) => {\n const simple = stripAnsiSimple(raw);\n return (\n !/^\\s*(Expected:|Received:|Difference:)\\b/.test(simple) &&\n !/^\\s*[-+]\\s/.test(simple) &&\n !/^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(simple)\n );\n })\n : primary;\n\n if (filtered.length) {\n const label = labelForMessage(filtered);\n out.push(` ${ansi.bold(label)}`);\n for (const lineText of filtered) {\n out.push(` ${ansi.yellow(colorUnifiedDiffLine(lineText))}`);\n }\n if (opts?.stackPreview && opts.stackPreview.length) {\n for (const frame of opts.stackPreview) {\n out.push(frame);\n }\n }\n out.push('');\n }\n return out;\n};\n\ntype ConsoleEntry = Readonly<{\n type?: unknown;\n message?: unknown;\n origin?: unknown;\n}>;\n\nfunction isConsoleEntry(candidate: unknown): candidate is ConsoleEntry {\n return typeof candidate === 'object' && candidate !== null;\n}\n\nexport const buildConsoleSection = (maybeConsole: unknown): string[] => {\n const out: string[] = [];\n if (!Array.isArray(maybeConsole)) {\n return out;\n }\n\n const entries = maybeConsole.filter(isConsoleEntry);\n\n const errorsOnly = entries.filter((entry) => {\n const val = entry?.type;\n return String(val ?? '').toLowerCase() === 'error';\n });\n const scored = errorsOnly\n .map((entry) => {\n const raw = entry?.message as unknown;\n const msg = Array.isArray(raw)\n ? raw.map(String).join(' ')\n : typeof raw === 'string'\n ? raw\n : String(raw ?? '');\n return { msg, score: msg.length };\n })\n .filter((item) => item.msg.trim().length > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, MAX_CONSOLE_ERRORS_TO_SHOW);\n if (scored.length) {\n out.push(ansi.dim(' Console errors:'));\n for (const item of scored) {\n out.push(` ${ansi.dim('\u2022')} ${item.msg}`);\n }\n out.push('');\n }\n return out;\n};\n\nexport const buildStackSection = (\n mergedForStack: readonly string[],\n ctx: BuildCtx,\n fallbackLoc?: Loc | null,\n): string[] => {\n const out: string[] = [];\n out.push(ansi.dim(' Stack:'));\n if (!ctx.showStacks) {\n out.push(` ${ansi.dim('(hidden by TEST_CLI_STACKS=)')}`, '');\n return out;\n }\n const tail = renderStackTail(mergedForStack, ctx.projectHint, 4);\n if (tail.length) {\n out.push(...tail);\n const loc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n if (loc) {\n const href = preferredEditorHref(loc.file, loc.line, ctx.editorCmd);\n out.push(` ${ansi.dim('at')} ${osc8(`${path.basename(loc.file)}:${loc.line}`, href)}`);\n }\n out.push('');\n return out;\n }\n if (fallbackLoc) {\n out.push(\n ` ${colorStackLine(`${fallbackLoc.file}:${fallbackLoc.line}:0`, ctx.projectHint)}`,\n '',\n );\n return out;\n }\n out.push(` ${ansi.dim('(no stack provided)')}`, '');\n return out;\n};\n\nexport const buildFileBadgeLine = (rel: string, failedCount: number): string =>\n failedCount > 0\n ? `${colorTokens.failPill('FAIL')} ${ansi.white(rel)}`\n : `${colorTokens.passPill('PASS')} ${ansi.white(rel)}`;\n\nexport const buildPerFileOverview = (\n rel: string,\n assertions: readonly { readonly fullName: string; readonly status: string }[],\n): string[] => {\n const out: string[] = [];\n out.push(`${ansi.magenta(rel)} ${ansi.dim(`(${assertions.length})`)}`);\n for (const assertion of assertions) {\n const name = assertion.fullName;\n if (assertion.status === 'passed') {\n out.push(` ${colorTokens.pass('\u2713')} ${ansi.dim(name)}`);\n } else if (assertion.status === 'todo') {\n out.push(` ${colorTokens.todo('\u2610')} ${ansi.dim(name)} ${colorTokens.todo('[todo]')}`);\n } else if (assertion.status === 'pending') {\n out.push(` ${colorTokens.skip('\u2193')} ${ansi.dim(name)} ${colorTokens.skip('[skipped]')}`);\n } else {\n out.push(` ${colorTokens.fail('\u00D7')} ${ansi.white(name)}`);\n }\n }\n out.push('');\n return out;\n};\n\nexport const formatJestOutputVitest = (\n raw: string,\n opts?: { readonly cwd?: string; readonly editorCmd?: string },\n): string => {\n const showStacks = Boolean(env.TEST_CLI_STACKS);\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const lines = raw.split(/\\r?\\n/);\n const out: string[] = [];\n const seenFailures = new Set<string>();\n const seenFiles = new Set<string>();\n for (let lineIndex = 0; lineIndex < lines.length; ) {\n const ln = stripAnsiSimple(lines[lineIndex]!);\n if (/^\\s*\u25CF\\s+/.test(ln)) {\n const title = ln.replace(/^\\s*\u25CF\\s+/, '').trim();\n const block: string[] = [lines[lineIndex]!];\n let scanIndex = lineIndex + 1;\n while (scanIndex < lines.length) {\n const scanLine = stripAnsiSimple(lines[scanIndex]!);\n const nextIsStart =\n /^\\s*\u25CF\\s+/.test(scanLine) ||\n /^\\s*(PASS|FAIL)\\s/.test(scanLine) ||\n /^\\s*Test Suites:/.test(scanLine);\n if (nextIsStart && stripAnsiSimple(lines[scanIndex - 1] ?? '').trim() === '') {\n break;\n }\n block.push(lines[scanIndex]!);\n scanIndex += 1;\n }\n const codeFrameStart = block.findIndex((candidateLine) =>\n /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(candidateLine)),\n );\n const location = firstTestLocation(block, projectHint);\n const rel = location\n ? location.split(':')[0]!.replace(/\\\\/g, '/').replace(`${cwd}/`, '')\n : '';\n const key = `${rel}|${title}`;\n if (seenFailures.has(key)) {\n lineIndex = scanIndex;\n continue;\n }\n seenFailures.add(key);\n out.push(drawFailLine());\n const header = `${colorTokens.fail('\u00D7')} ${ansi.white(rel ? `${rel} > ${title}` : title)}`;\n out.push(header);\n // Reordered block: header already printed \u2192 codeframe \u2192 pretty diff \u2192 message \u2192 stack\n const linesBlock = block.map(String);\n const collapsedForSrc = collapseStacks(linesBlock.slice(0));\n // 1) Codeframe (embedded or synthesized)\n if (codeFrameStart >= 0) {\n out.push('');\n out.push(...renderCodeFrame(linesBlock, codeFrameStart));\n out.push('');\n } else if (showStacks) {\n const deepestIdxForSrc = findLastProjectFrameIndex(collapsedForSrc, projectHint);\n const locForSrc =\n deepestIdxForSrc >= 0 ? stackLocation(collapsedForSrc[deepestIdxForSrc]!) : null;\n if (locForSrc) {\n out.push('');\n out.push(...renderSourceCodeFrame(locForSrc.file, locForSrc.line));\n out.push('');\n }\n }\n // 2) Pretty Expected/Received\n const payload = extractExpectedReceived(undefined, linesBlock);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n // 3) Message with label + inline top project frames\n const detailsForMsg = linesFromDetails(undefined);\n const collapsedForTail = collapseStacks(linesBlock.slice(0));\n const stackPreview = showStacks ? firstProjectFrames(collapsedForTail, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(\n linesBlock,\n detailsForMsg,\n { projectHint, editorCmd: opts?.editorCmd, showStacks },\n { suppressDiff: hasPretty, stackPreview },\n ),\n );\n\n // 4) Stack tail last \u2014 only if we didn\u2019t inline a preview\n if (showStacks && stackPreview.length === 0) {\n const collapsed = collapseStacks(linesBlock.slice(0));\n out.push(\n ...buildStackSection(collapsed, {\n projectHint,\n editorCmd: opts?.editorCmd,\n showStacks,\n }),\n );\n }\n out.push(drawFailLine());\n out.push('');\n lineIndex = scanIndex;\n continue;\n }\n const passFail = ln.match(/^\\s*(PASS|FAIL)\\s+(.+)$/);\n if (passFail) {\n const badge = passFail[1]!;\n const fileAbs = passFail[2]!;\n const rel = fileAbs.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n if (seenFiles.has(rel)) {\n lineIndex += 1;\n continue;\n }\n seenFiles.add(rel);\n const pill = badge === 'PASS' ? colorTokens.passPill('PASS') : colorTokens.failPill('FAIL');\n out.push(`${pill} ${ansi.white(rel)}`);\n lineIndex += 1;\n continue;\n }\n if (/^\\s*(Test Suites:|Tests:|Snapshots:|Time:|Ran all)/.test(ln)) {\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n continue;\n }\n if (isStackLine(ln)) {\n if (showStacks) {\n const kept = collapseStacks([lines[lineIndex]!]);\n out.push(...kept);\n }\n lineIndex += 1;\n continue;\n }\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n }\n const rendered = out.join('\\n');\n // Detect if no test sections were parsed from the live stream and fall back to JSON rendering\n const hadParsedTests =\n seenFiles.size > 0 ||\n seenFailures.size > 0 ||\n out.some((lineText) => /^(?:\\s*)(PASS|FAIL)\\b/.test(stripAnsiSimple(lineText)));\n\n if (!hadParsedTests) {\n const bridgePath = extractBridgePath(raw, cwd);\n if (bridgePath && fs.existsSync(bridgePath)) {\n try {\n const json = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));\n const bridge = coerceJestJsonToBridge(json);\n const renderedFromJson = renderVitestFromJestJSON(bridge, opts);\n const prefix = out.join('\\n');\n return prefix ? `${prefix}\\n${renderedFromJson}` : renderedFromJson;\n } catch {\n // if JSON load fails, fall through to the minimal stream output\n }\n }\n }\n try {\n const preview = rendered.split('\\n').slice(0, 2).join('\\n');\n // eslint-disable-next-line no-console\n console.info(`formatJestOutputVitest: produced ${out.length} lines; preview:\\n${preview}`);\n } catch {\n /* no-op */\n }\n return rendered;\n};\n\nexport type BridgeJSON = {\n startTime: number;\n testResults: Array<{\n testFilePath: string;\n status: 'passed' | 'failed';\n failureMessage: string;\n failureDetails?: unknown[];\n console?: Array<{ message?: string; type?: string; origin?: string }> | null;\n testResults: Array<{\n fullName: string;\n status: string;\n duration: number;\n location: { line: number; column: number } | null;\n failureMessages: string[];\n }>;\n }>;\n aggregated: {\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n startTime: number;\n success: boolean;\n runTimeMs?: number;\n };\n};\n\ntype JestAssertionResult = {\n title: string;\n ancestorTitles: string[];\n status: string;\n location?: { line: number; column: number } | null;\n failureMessages?: string[];\n fullName?: string;\n duration?: number;\n};\n\ntype JestTestResultExtra = {\n readonly failureDetails?: unknown[];\n readonly console?: ReadonlyArray<{\n message?: unknown;\n type?: unknown;\n origin?: unknown;\n }> | null;\n readonly perfStats?: Readonly<Record<string, unknown>>;\n};\n\ntype JestTestResult = {\n testFilePath?: string;\n name?: string;\n status: 'passed' | 'failed';\n failureMessage?: string;\n assertionResults?: JestAssertionResult[];\n} & JestTestResultExtra;\n\ntype JestAggregatedResult = {\n startTime: number;\n success: boolean;\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n testResults: JestTestResult[];\n};\n\nconst isBridgeJSONLike = (candidate: unknown): candidate is BridgeJSON => {\n const candidateValue = candidate as Record<string, unknown> | null;\n return (\n typeof candidateValue === 'object' &&\n candidateValue !== null &&\n 'aggregated' in (candidateValue as Record<string, unknown>)\n );\n};\n\nexport function coerceJestJsonToBridge(raw: unknown): BridgeJSON {\n if (isBridgeJSONLike(raw)) {\n return raw as BridgeJSON;\n }\n const j = raw as JestAggregatedResult;\n if (!j || !Array.isArray(j.testResults)) {\n throw new Error('Unexpected Jest JSON shape');\n }\n return {\n startTime: Number(j.startTime ?? Date.now()),\n testResults: j.testResults.map((testFileResult) => ({\n testFilePath: testFileResult.testFilePath || testFileResult.name || '',\n status: testFileResult.status,\n failureMessage: testFileResult.failureMessage || '',\n failureDetails: testFileResult.failureDetails ?? [],\n testResults: (testFileResult.assertionResults || []).map((assertion) => ({\n title: assertion.title,\n fullName:\n assertion.fullName || [...(assertion.ancestorTitles || []), assertion.title].join(' '),\n status: assertion.status,\n duration: assertion.duration || 0,\n location: assertion.location ?? null,\n failureMessages: assertion.failureMessages || [],\n })),\n })),\n aggregated: {\n numTotalTestSuites: j.numTotalTestSuites,\n numPassedTestSuites: j.numPassedTestSuites,\n numFailedTestSuites: j.numFailedTestSuites,\n numTotalTests: j.numTotalTests,\n numPassedTests: j.numPassedTests,\n numFailedTests: j.numFailedTests,\n numPendingTests: j.numPendingTests,\n numTodoTests: j.numTodoTests,\n startTime: j.startTime,\n success: j.success,\n },\n };\n}\n\nconst vitestFooter = (\n agg: BridgeJSON['aggregated'],\n _startedAt?: number,\n durationMs?: number,\n): string => {\n const files = [\n agg.numFailedTestSuites ? colorTokens.fail(`${agg.numFailedTestSuites} failed`) : '',\n agg.numPassedTestSuites ? colorTokens.pass(`${agg.numPassedTestSuites} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const tests = [\n agg.numFailedTests ? colorTokens.fail(`${agg.numFailedTests} failed`) : '',\n agg.numPassedTests ? colorTokens.pass(`${agg.numPassedTests} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n agg.numTodoTests ? colorTokens.todo(`${agg.numTodoTests} todo`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const durMs =\n typeof durationMs === 'number'\n ? durationMs\n : typeof agg.runTimeMs === 'number'\n ? agg.runTimeMs\n : undefined;\n const time = durMs != null ? `${Math.max(0, Math.round(durMs))}ms` : '';\n const thread = ansi.dim('(in thread 0ms, 0.00%)');\n\n return [\n `${ansi.bold('Test Files')} ${files} ${ansi.dim(`(${agg.numTotalTestSuites})`)}`,\n `${ansi.bold('Tests')} ${tests} ${ansi.dim(`(${agg.numTotalTests})`)}`,\n `${ansi.bold('Time')} ${time} ${thread}`,\n ].join('\\n');\n};\n\nexport function renderVitestFromJestJSON(\n data: BridgeJSON,\n opts?: { cwd?: string; editorCmd?: string },\n): string {\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const ctx: BuildCtx = { projectHint, editorCmd: opts?.editorCmd, showStacks: true };\n const out: string[] = [];\n // Top RUN line\n out.push(renderRunLine(cwd));\n out.push('');\n for (const file of data.testResults) {\n const rel = file.testFilePath.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n const failed = file.testResults.filter((assertion) => assertion.status === 'failed');\n // Per-file overview list\n out.push(...buildPerFileOverview(rel, file.testResults));\n // File header block with PASS/FAIL badge\n out.push(buildFileBadgeLine(rel, failed.length));\n // Only render file-level failure when there are NO per-assertion failures\n if (file.failureMessage && failed.length === 0) {\n const lines = file.failureMessage.split(/\\r?\\n/);\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...lines, ...details.stacks]);\n const synthLoc = deepestProjectLoc(mergedForStack, projectHint);\n out.push(...buildCodeFrameSection(lines, ctx, synthLoc));\n\n const payload = extractExpectedReceived(file.failureDetails, lines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(lines, details, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n out.push(...buildConsoleSection(file.console ?? null));\n\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(...buildStackSection(mergedForStack, ctx));\n }\n }\n for (const failedAssertion of failed) {\n out.push(drawFailLine());\n const header = `${rel} > ${failedAssertion.fullName}`;\n const messagesArray: string[] =\n failedAssertion.failureMessages.length > 0 ? failedAssertion.failureMessages : [''];\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...messagesArray, ...details.stacks]);\n const deepestLoc = deepestProjectLoc(mergedForStack, projectHint);\n const locLink =\n deepestLoc &&\n (() => {\n const href = preferredEditorHref(deepestLoc.file, deepestLoc.line, opts?.editorCmd);\n const base = `${path.basename(deepestLoc.file)}:${deepestLoc.line}`;\n return osc8(base, href);\n })();\n const headerLine = `${ansi.white(header)}${locLink ? ` ${ansi.dim(`(${locLink})`)}` : ''}`;\n const bullet = (text: string) => `${colorTokens.fail('\u00D7')} ${ansi.white(text)}`;\n out.push(bullet(headerLine));\n const msgLines = messagesArray.join('\\n').split('\\n');\n const assertFallback =\n deepestLoc ||\n (failedAssertion.location && {\n file: file.testFilePath,\n line: failedAssertion.location.line,\n });\n out.push('', ...buildCodeFrameSection(msgLines, ctx, assertFallback), '');\n\n const payload = extractExpectedReceived(file.failureDetails, msgLines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(msgLines, details, ctx, { suppressDiff: hasPretty, stackPreview }),\n );\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(\n ...buildStackSection(\n mergedForStack,\n ctx,\n failedAssertion.location\n ? { file: file.testFilePath, line: failedAssertion.location.line }\n : null,\n ),\n );\n }\n out.push(drawFailLine());\n out.push('');\n }\n }\n // Dashed rule + right-aligned pill\n const failedCount = data.aggregated.numFailedTests;\n out.push(drawRule(colorTokens.failPill(` Failed Tests ${failedCount} `)));\n out.push('');\n const footer = vitestFooter(\n data.aggregated,\n data.aggregated?.startTime ?? data.startTime,\n data.aggregated?.runTimeMs,\n );\n return `${out.join('\\n')}\\n${footer}`;\n}\n", "import { ansi } from './ansi';\n\nexport const isStackLine = (line: string) => /\\s+at\\s+/.test(line);\n\nexport const stripAnsiSimple = (text: string): string => {\n let out = '';\n for (let i = 0; i < text.length; i += 1) {\n const charCode = text.charCodeAt(i);\n if (charCode === 27 /* ESC */) {\n if (text.charAt(i + 1) === '[') {\n i += 2;\n while (i < text.length) {\n const code = text.charCodeAt(i);\n if (code >= 0x40 && code <= 0x7e) {\n break;\n }\n i += 1;\n }\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n out += text.charAt(i);\n }\n return out;\n};\n\nexport const firstTestLocation = (lines: readonly string[], projectHint: RegExp) => {\n for (const ln of lines) {\n const match = ln.match(/\\(([^()]+?:\\d+:\\d+)\\)/) || ln.match(/\\s([\\w./-]+?:\\d+:\\d+)\\s*$/);\n if (match && projectHint.test(match[1]!)) {\n return match[1]!;\n }\n }\n return undefined;\n};\n\nexport const collapseStacks = (lines: readonly string[]) => {\n const out: string[] = [];\n let hidden = 0;\n const flush = () => {\n if (hidden > 0) {\n out.push(ansi.gray(` \u2026 ${hidden} stack frame${hidden === 1 ? '' : 's'} hidden`));\n hidden = 0;\n }\n };\n for (const raw of lines) {\n const ln = stripAnsiSimple(raw);\n if (isStackLine(ln)) {\n // Treat any stack frame inside node_modules or node: internals as noisy.\n // We do NOT keep these frames, as they are generally runner internals and\n // overwhelm the useful frames.\n const noisy = /node_modules\\//.test(ln) || /\\s+at\\s+node:/.test(ln);\n const keep = !noisy;\n if (!keep) {\n hidden += 1;\n // eslint-disable-next-line no-continue\n continue;\n }\n flush();\n out.push(raw);\n } else {\n flush();\n out.push(raw);\n }\n }\n flush();\n return out;\n};\n", "import { program } from \"./lib/program\";\n\nprogram().catch((err: unknown) => {\n // eslint-disable-next-line no-console\n console.error(err);\n process.exit(1);\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "path", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "fs", "path", "mkdir", "stat", "exports", "module", "exports", "module", "os", "env", "exports", "module", "path", "fs", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "path", "exports", "module", "path", "parent", "exports", "module", "fs", "path", "watermarks", "exports", "module", "exports", "module", "exports", "module", "path", "resolve", "resolve", "env", "path", "uniq", "require_constants", "exports", "module", "path", "exports", "path", "exports", "module", "exports", "module", "opts", "value", "rest", "create", "source", "exports", "module", "path", "picomatch", "state", "require_picomatch", "exports", "module", "exports", "module", "exports", "module", "require_parse", "exports", "module", "util", "key", "token", "c", "buffer", "exports", "module", "util", "value", "exports", "module", "JSON5", "path", "os", "fsSync", "import_istanbul_lib_coverage", "fs", "path", "fs", "path", "path", "stat", "babelNodeBin", "jestBin", "fs", "path", "picomatch", "path", "fsSync", "ext", "stem", "hideMiddle", "label", "headRaw", "tailRaw", "extractImportSpecs", "path", "fs", "JSON5", "JSON5", "prodSelections", "cachedRelated", "findRelatedTestsFast", "DEFAULT_TEST_GLOBS", "DEFAULT_EXCLUDE"]
|
|
7
7
|
}
|