headlamp 0.1.12 → 0.1.13

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.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../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/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/relevance.ts", "../src/lib/jest-reporter-source.ts", "../src/lib/jest-environment-source.ts", "../src/lib/stacks.ts", "../src/lib/fp.ts", "../src/lib/formatter/parse.ts", "../src/lib/formatter/render.ts", "../src/lib/formatter/fns.ts", "../src/lib/formatter/context.ts", "../src/lib/formatter/bridge.ts", "../src/lib/formatJestOutputVitest.ts", "../src/cli.ts"],
4
- "sourcesContent": ["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 ChangedMode = 'all' | 'staged' | 'unstaged' | 'branch';\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: 'onlyFailures'; 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 | { readonly type: 'changed'; readonly value: ChangedMode };\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 onlyFailures: (value: boolean): Action => ({ type: 'onlyFailures', 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 changed: (value: ChangedMode): Action => ({ type: 'changed', 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 // --onlyFailures flag (boolean)\n rule.eq('--onlyFailures', () => step([ActionBuilders.onlyFailures(true)])),\n rule.startsWith('--onlyFailures=', (value) =>\n step([\n ActionBuilders.onlyFailures(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase())),\n ]),\n ),\n rule.withLookahead('--onlyFailures', (_flag, lookahead) =>\n step([ActionBuilders.onlyFailures(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 // --changed flag: selects changed files via git (all|staged|unstaged)\n rule.eq('--changed', () => step([ActionBuilders.changed('all')])),\n rule.startsWith('--changed=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const mode: ChangedMode =\n raw === 'staged'\n ? 'staged'\n : raw === 'unstaged'\n ? 'unstaged'\n : raw === 'branch'\n ? 'branch'\n : 'all';\n return step([ActionBuilders.changed(mode)]);\n }),\n rule.withLookahead('--changed', (_flag, lookahead) => {\n const raw = String(lookahead).trim().toLowerCase();\n const mode: ChangedMode =\n raw === 'staged'\n ? 'staged'\n : raw === 'unstaged'\n ? 'unstaged'\n : raw === 'branch'\n ? 'branch'\n : 'all';\n return step([ActionBuilders.changed(mode)], true);\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 onlyFailures: 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 readonly changed?: ChangedMode;\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 onlyFailures?: 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 readonly changed?: ChangedMode;\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 'onlyFailures':\n return { vitest: [], jest: [], coverage: false, onlyFailures: 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 'changed':\n return { vitest: [], jest: [], coverage: false, changed: 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.changed !== undefined || left.changed !== undefined\n ? { changed: right.changed ?? left.changed }\n : {}),\n ...(right.coverageAbortOnFailure !== undefined || left.coverageAbortOnFailure !== undefined\n ? { coverageAbortOnFailure: right.coverageAbortOnFailure ?? left.coverageAbortOnFailure }\n : {}),\n ...(right.onlyFailures !== undefined || left.onlyFailures !== undefined\n ? { onlyFailures: right.onlyFailures ?? left.onlyFailures }\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 onlyFailures = 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 onlyFailures = contrib.onlyFailures ?? onlyFailures;\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 onlyFailures,\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 ...(contrib.changed !== undefined ? { changed: contrib.changed } : {}),\n };\n return out;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as fs from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\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 (opts: FindRelatedOpts): 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.map((productionPath) => path.resolve(productionPath)).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) => args.push('-g', `!${excludeGlobPattern}`));\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) || /(^|\\/)tests?\\//i.test(pathText);\n\n const absolute = lines\n .map((relativePath) => path.resolve(repoRoot, relativePath).replace(/\\\\/g, '/'))\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 cacheRoot = process.env.HEADLAMP_CACHE_DIR || path.join(os.tmpdir(), 'headlamp-cache');\n const repoKey = createHash('sha1').update(path.resolve(opts.repoRoot)).digest('hex').slice(0, 12);\n const cacheDir = path.join(cacheRoot, repoKey);\n const cacheFile = path.join(cacheDir, 'relevant-tests.json');\n\n let head = 'nogit';\n try {\n const raw = await runText('git', ['-C', opts.repoRoot, 'rev-parse', '--short', 'HEAD'], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\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<string, string[]>;\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 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<string, string[]>;\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 * as fs from 'node:fs/promises';\n\nimport * as LibReport from 'istanbul-lib-report';\nimport * as Reports from 'istanbul-reports';\nimport { createCoverageMap } from 'istanbul-lib-coverage';\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 { JEST_BRIDGE_REPORTER_SOURCE } from './jest-reporter-source';\nimport { JEST_BRIDGE_ENV_SOURCE } from './jest-environment-source';\nimport { formatJestOutputVitest } from './formatJestOutputVitest';\nimport {\n renderVitestFromJestJSON,\n coerceJestJsonToBridge,\n type BridgeJSON,\n} from './formatter/bridge';\nimport { makeCtx } from './formatter/context';\nimport { stripAnsiSimple } from './stacks';\nimport { tintPct } from './bars';\nimport { selectDirectTestsForProduction } from './graph-distance';\nimport { computeDirectnessRank, sortTestResultsWithRank } from './relevance';\n\nconst jestBin = './node_modules/.bin/jest';\nconst babelNodeBin = './node_modules/.bin/babel-node';\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 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 const jestParts: string[] = [];\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 // Merge all lcov.info files under coverage/jest/** (including root)\n const collectLcovs = (dir: string): string[] => {\n const out: string[] = [];\n try {\n const entries = fsSync.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n out.push(...collectLcovs(full));\n } else if (entry.isFile() && entry.name === 'lcov.info') {\n out.push(full);\n }\n }\n } catch {\n /* ignore */\n }\n return out;\n };\n try {\n const jestRoot = path.join('coverage', 'jest');\n const candidates = [path.join(jestRoot, 'lcov.info'), ...collectLcovs(jestRoot)]\n .map((candidatePath) => path.resolve(candidatePath))\n .filter((absolutePath, index, arr) => arr.indexOf(absolutePath) === index);\n for (const filePath of candidates) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const content = await readOrEmpty(filePath);\n if (content.trim()) {\n jestParts.push(content.trim());\n }\n } catch {\n /* ignore */\n }\n }\n } catch (readJestError) {\n if (isDebug()) {\n console.info(`scan jest lcov failed: ${String(readJestError)}`);\n }\n }\n if (!vitestContent && jestParts.length === 0) {\n if (isDebug()) {\n console.info('No coverage outputs found to merge.');\n }\n return;\n }\n const merged = [vitestContent.trim(), ...jestParts].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 // Merge any coverage-final.json under coverage/jest/**\n const map = createCoverageMap({});\n const listJsons = (dir: string): string[] => {\n const out: string[] = [];\n try {\n const entries = fsSync.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n out.push(...listJsons(full));\n } else if (entry.isFile() && entry.name === 'coverage-final.json') {\n out.push(full);\n }\n }\n } catch {\n /* ignore */\n }\n return out;\n };\n const coverageRoot = path.join('coverage', 'jest');\n const jsonCandidates = [\n path.join(coverageRoot, 'coverage-final.json'),\n ...listJsons(coverageRoot),\n ]\n .map((candidatePath) => path.resolve(candidatePath))\n .filter((absolutePath, index, arr) => {\n const isFirst = arr.indexOf(absolutePath) === index;\n const exists = fsSync.existsSync(absolutePath);\n return isFirst && exists;\n });\n for (const jsonPath of jsonCandidates) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const data = await readCoverageJson(jsonPath);\n if (Object.keys(data).length) {\n map.merge(data);\n }\n } catch (mergeJestError) {\n console.warn(`Failed merging jest coverage JSON @ ${jsonPath}: ${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 onlyFailures,\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 changed,\n } = deriveArgs(argv);\n // Derive changed-file selection (staged/unstaged/all) when requested\n const getChangedFiles = async (\n mode: 'all' | 'staged' | 'unstaged' | 'branch',\n cwd: string,\n ): Promise<readonly string[]> => {\n const collect = async (cmd: string, args: readonly string[]) => {\n try {\n const out = await runText(cmd, args, {\n cwd,\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 4000,\n });\n return out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n } catch {\n return [] as string[];\n }\n };\n if (mode === 'branch') {\n // Determine default branch (origin/HEAD -> ref or fall back to origin/main, origin/master)\n const resolveDefaultBranch = async (): Promise<string | undefined> => {\n const candidates: string[] = [];\n try {\n const sym = await collect('git', ['symbolic-ref', 'refs/remotes/origin/HEAD']);\n const headRef = sym.find((ln) => ln.includes('refs/remotes/origin/'));\n if (headRef) {\n const m = /refs\\/remotes\\/(.+)/.exec(headRef);\n if (m && m[1]) {\n candidates.push(m[1]);\n }\n }\n } catch {\n /* ignore */\n }\n candidates.push('origin/main', 'origin/master');\n for (const cand of candidates) {\n // eslint-disable-next-line no-await-in-loop\n const exists = await collect('git', ['rev-parse', '--verify', cand]);\n if (exists.length > 0) {\n return cand;\n }\n }\n return undefined;\n };\n const defaultBranch = await resolveDefaultBranch();\n const mergeBase = defaultBranch\n ? (await collect('git', ['merge-base', 'HEAD', defaultBranch]))[0]\n : undefined;\n const diffBase = mergeBase ?? 'HEAD^';\n const branchDiff = await collect('git', [\n 'diff',\n '--name-only',\n '--diff-filter=ACMRTUXB',\n diffBase,\n 'HEAD',\n ]);\n // On top of branch diff, include current uncommitted (staged/unstaged) and untracked changes\n const stagedNow = await collect('git', [\n 'diff',\n '--name-only',\n '--diff-filter=ACMRTUXB',\n '--cached',\n ]);\n const unstagedNow = await collect('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB']);\n const untrackedNow = await collect('git', ['ls-files', '--others', '--exclude-standard']);\n const rels = Array.from(\n new Set([...branchDiff, ...stagedNow, ...unstagedNow, ...untrackedNow]),\n );\n return rels\n .map((rel) => path.resolve(cwd, rel).replace(/\\\\/g, '/'))\n .filter((abs) => !abs.includes('/node_modules/') && !abs.includes('/coverage/'));\n }\n const staged =\n mode === 'staged' || mode === 'all'\n ? await collect('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB', '--cached'])\n : [];\n const unstagedTracked =\n mode === 'unstaged' || mode === 'all'\n ? await collect('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB'])\n : [];\n const untracked =\n mode === 'unstaged' || mode === 'all'\n ? await collect('git', ['ls-files', '--others', '--exclude-standard'])\n : [];\n const rels = Array.from(new Set([...staged, ...unstagedTracked, ...untracked]));\n return rels\n .map((rel) => path.resolve(cwd, rel).replace(/\\\\/g, '/'))\n .filter((abs) => !abs.includes('/node_modules/') && !abs.includes('/coverage/'));\n };\n const repoRootForChanged = workspaceRoot ?? (await findRepoRoot());\n const changedSelectionAbs = changed\n ? await getChangedFiles(changed, repoRootForChanged)\n : ([] as readonly string[]);\n const selectionPathsAugmented = changedSelectionAbs.length\n ? Array.from(new Set([...(selectionPaths as readonly string[]), ...changedSelectionAbs]))\n : selectionPaths;\n const selectionSpecifiedAugmented = Boolean(selectionSpecified || changedSelectionAbs.length > 0);\n console.info(\n `Selection \u2192 specified=${selectionSpecifiedAugmented} paths=${selectionPathsAugmented.length}`,\n );\n const { jest } = argsForDiscovery(['run'], jestArgs);\n const selectionLooksLikeTest = selectionPathsAugmented.some(\n (pathText) => /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) || /(^|\\/)tests?\\//i.test(pathText),\n );\n const selectionLooksLikePath = selectionPathsAugmented.some(\n (pathText) => /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText),\n );\n const selectionHasPaths = selectionPathsAugmented.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 = selectionPathsAugmented.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(selectionPathsAugmented, 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) => !selectionPathsAugmented.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 = selectionPathsAugmented.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((firstPath, secondPath) => firstPath.localeCompare(secondPath))\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 // If no candidates remain, expand search\n // universe to all discovered Jest tests across projects\n if (jestFiles.length === 0) {\n try {\n const allAcross: string[] = [];\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const listed = await discoverJestResilient([...jestDiscoveryArgs, '--config', cfg], {\n cwd: cfgCwd,\n });\n allAcross.push(...listed);\n }\n const uniqAll = Array.from(new Set(allAcross.map((p) => p.replace(/\\\\/g, '/'))));\n if (uniqAll.length > 0) {\n jestFiles = uniqAll;\n }\n } catch {\n // ignore\n }\n }\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: selectionSpecifiedAugmented,\n selectionPaths: selectionPathsAugmented,\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 allBridgeJson: Array<ReturnType<typeof coerceJestJsonToBridge>> = [];\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 sanitizedJestRunArgs = jestRunArgs.filter(\n (arg) => !/^--coverageDirectory(?:=|$)/.test(String(arg)),\n );\n const projectsToRun = projectConfigs.filter(\n (cfg) => (perProjectFiltered.get(cfg) ?? []).length > 0,\n );\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 // Compute directness order for the whole run (project-agnostic list)\n const prodSeedsForRun = ((): readonly string[] => {\n const changedAbs = (changedSelectionAbs ?? []).map((absPath) =>\n path.resolve(absPath).replace(/\\\\/g, '/'),\n );\n const selAbs = (selectionPathsAugmented as readonly string[]).map((pathToken) =>\n path.resolve(pathToken).replace(/\\\\/g, '/'),\n );\n return (changedAbs.length ? changedAbs : selAbs).filter(\n (abs) =>\n /[\\\\/]/.test(abs) &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs),\n );\n })();\n const repoRootForRank = repoRootForDiscovery;\n const fileRank = await computeDirectnessRank({\n repoRoot: repoRootForRank,\n productionSeeds: prodSeedsForRun,\n });\n\n for (let projIndex = 0; projIndex < projectsToRun.length; projIndex += 1) {\n const cfg = projectsToRun[projIndex]!;\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 const needsWrite = (() => {\n try {\n const existing = fsSync.readFileSync(reporterPath, 'utf8');\n return existing !== JEST_BRIDGE_REPORTER_SOURCE;\n } catch {\n return true;\n }\n })();\n if (needsWrite) {\n fsSync.mkdirSync(path.dirname(reporterPath), { recursive: true });\n fsSync.writeFileSync(reporterPath, JEST_BRIDGE_REPORTER_SOURCE, 'utf8');\n }\n // ensure environment file exists\n const envPath = path.resolve('scripts/jest-bridge-env.cjs');\n try {\n const existingEnv = fsSync.readFileSync(envPath, 'utf8');\n if (existingEnv !== JEST_BRIDGE_ENV_SOURCE) {\n fsSync.writeFileSync(envPath, JEST_BRIDGE_ENV_SOURCE, 'utf8');\n }\n } catch {\n try {\n fsSync.mkdirSync(path.dirname(envPath), { recursive: true });\n } catch {}\n fsSync.writeFileSync(envPath, JEST_BRIDGE_ENV_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 = selectionPathsAugmented\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 '--testLocationInResults',\n '--runTestsByPath',\n `--reporters=${reporterPath}`,\n '--colors',\n '--env',\n path.resolve('scripts/jest-bridge-env.cjs'),\n ...sanitizedJestRunArgs,\n ...(collectCoverage\n ? [\n '--coverageDirectory',\n path.join('coverage', 'jest', path.basename(cfg).replace(/[^a-zA-Z0-9_.-]+/g, '_')),\n ]\n : []),\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 allBridgeJson.push(bridge);\n // Reorder per-file results by directness and failure before rendering\n try {\n const reordered = {\n ...bridge,\n testResults: sortTestResultsWithRank(fileRank, bridge.testResults).reverse(),\n } as typeof bridge;\n pretty = renderVitestFromJestJSON(\n reordered,\n makeCtx(\n { cwd: repoRootForDiscovery, ...(editorCmd !== undefined ? { editorCmd } : {}) },\n /\\bFAIL\\b/.test(stripAnsiSimple(output)),\n ),\n { onlyFailures },\n );\n } catch {\n pretty = renderVitestFromJestJSON(\n bridge,\n makeCtx(\n { cwd: repoRootForDiscovery, ...(editorCmd !== undefined ? { editorCmd } : {}) },\n /\\bFAIL\\b/.test(stripAnsiSimple(output)),\n ),\n { onlyFailures },\n );\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 pretty = formatJestOutputVitest(output, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n onlyFailures,\n });\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 the bridge output still looks sparse (common `Error:` with no detail),\n // append raw text rendering as an extra hint source.\n try {\n const looksSparse =\n /\\n\\s*Error:\\s*\\n/.test(pretty) &&\n !/(Message:|Thrown:|Events:|Console errors:)/.test(pretty);\n if (looksSparse) {\n const rawAlso = formatJestOutputVitest(output, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n onlyFailures,\n });\n const merged = `${stripFooter(pretty)}\\n${stripFooter(rawAlso)}`.trimEnd();\n pretty = merged;\n }\n } catch {\n /* ignore raw merge failures */\n }\n // Always drop per-project footer; we'll print a unified summary later\n pretty = stripFooter(pretty);\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 // Print unified merged summary across all projects when available\n if (allBridgeJson.length > 0) {\n const agg = allBridgeJson.map((bridge) => bridge.aggregated);\n const sum = (select: (arg: (typeof agg)[number]) => number) =>\n agg.reduce((total, item) => total + (select(item) || 0), 0);\n const startTime = Math.min(\n ...allBridgeJson.map((bridge) => Number(bridge.startTime || Date.now())),\n );\n const unified = {\n startTime,\n testResults: allBridgeJson.flatMap((bridge) => bridge.testResults),\n aggregated: {\n numTotalTestSuites: sum((item) => item.numTotalTestSuites),\n numPassedTestSuites: sum((item) => item.numPassedTestSuites),\n numFailedTestSuites: sum((item) => item.numFailedTestSuites),\n numTotalTests: sum((item) => item.numTotalTests),\n numPassedTests: sum((item) => item.numPassedTests),\n numFailedTests: sum((item) => item.numFailedTests),\n numPendingTests: sum((item) => item.numPendingTests),\n numTodoTests: sum((item) => item.numTodoTests),\n startTime,\n success: agg.every((item) => Boolean(item.success)),\n runTimeMs: sum((item) => Number(item.runTimeMs ?? 0)),\n },\n } as const;\n // Order results by directness (import-graph distance)\n try {\n const prodSeeds = ((): readonly string[] => {\n const changedAbs = (changedSelectionAbs ?? []).map((absPath) =>\n path.resolve(absPath).replace(/\\\\/g, '/'),\n );\n const selAbs = (selectionPathsAugmented as readonly string[]).map((pathToken) =>\n path.resolve(pathToken).replace(/\\\\/g, '/'),\n );\n return (changedAbs.length ? changedAbs : selAbs).filter(\n (abs) =>\n /[\\\\/]/.test(abs) &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs),\n );\n })();\n const unifiedRank = await computeDirectnessRank({\n repoRoot: repoRootForDiscovery,\n productionSeeds: prodSeeds,\n });\n const ordered = sortTestResultsWithRank(unifiedRank, unified.testResults).reverse();\n // eslint-disable-next-line no-param-reassign\n (unified as any).testResults = ordered;\n } catch {\n // ignore relevance sorting on failure\n }\n const showStacks = Boolean((unified as any).aggregated?.numFailedTests > 0);\n let text = renderVitestFromJestJSON(\n unified as unknown as BridgeJSON,\n makeCtx(\n { cwd: repoRootForDiscovery, ...(editorCmd !== undefined ? { editorCmd } : {}) },\n showStacks,\n ),\n { onlyFailures },\n );\n if (onlyFailures) {\n text = text\n .split(/\\r?\\n/)\n .filter((line) => !/^\\s*PASS\\b/.test(stripAnsiSimple(line)))\n .join('\\n');\n }\n if (text.trim().length > 0) {\n process.stdout.write(text.endsWith('\\n') ? text : `${text}\\n`);\n }\n }\n\n const finalExitCode = jestExitCode;\n if (collectCoverage && shouldRunJest && coverageAbortOnFailure && finalExitCode !== 0) {\n process.exit(finalExitCode);\n return;\n }\n // Only compute and print coverage if we are not aborting after failures\n if (collectCoverage && shouldRunJest) {\n await mergeLcov();\n const repoRoot = workspaceRoot ?? (await findRepoRoot());\n const mergedOptsBase = {\n selectionSpecified: selectionSpecifiedAugmented,\n selectionPaths: selectionPathsAugmented,\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 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';\n\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 { computeDirectnessRank, sortPathsWithRank } from './relevance';\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(sum.functions.pct)(\n funcsPctText,\n )} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const max = opts.limitPerFile === 'all' ? Number.POSITIVE_INFINITY : (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.slice().sort(compareRangesByLengthDescThenStart).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(`L${block.end}`)} ${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(` - branch#${br.id} @ ${link} missed paths: [${br.zeroPaths.join(', ')}]`);\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 ? process.stdout.rows : 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 ? Math.max(2, Math.floor(availableRows * 0.25)) : 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).slice().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(sum.functions.pct)(\n funcsPctText,\n )} 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(` - L${hotspot.start}\u2013L${hotspot.end} (${len} lines) ${link}`);\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(` \u2026 truncated: +${restHs} hotspots, +${restFns} funcs, +${restBrs} branches`),\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 = 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(headParts, tailParts, hideMiddle || hidAny, baseLabel);\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(headRaw, tailRaw, hideMiddle, baseFull, maxWidth);\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(headRaw, tailRaw, hideMiddle, baseFull, maxWidth);\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(headRaw, tailRaw, hideMiddle, baseFull, maxWidth);\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(currentFile, spec, rootDir, resolutionCache);\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 ? process.stdout.rows : 40;\n const tableBudget = Math.max(14, Math.min(opts.maxRows ?? rowsAvail - 1, rowsAvail + 8));\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(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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' ? opts.maxHotspots : Math.ceil(rowBudget * 0.45),\n blocks.length,\n );\n if (wantHs > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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(width);\n return linkifyPadded(opts.absPath, hotspotRange.start, opts.editorCmd)(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(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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(width);\n return linkifyPadded(opts.absPath, missedFunction.line, opts.editorCmd)(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(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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(width);\n return linkifyPadded(opts.absPath, missedBranch.line, opts.editorCmd)(display);\n }),\n cell('Branch'),\n cell(`L${missedBranch.line}`),\n cell(''),\n cell(''),\n cell(''),\n cell(''),\n cell(`#${missedBranch.id} missed [${missedBranch.zeroPaths.join(', ')}]`),\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(width);\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([cell(''), cell(''), cell(''), cell(''), cell(''), cell(''), cell(''), cell('')]);\n }\n }\n }\n const table = renderTable(cols, rows);\n console.info(table);\n const sep = ansi.gray(\n '\u2500'.repeat(\n Math.max(20, typeof process.stdout.columns === 'number' ? process.stdout.columns : 100),\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 dirA === dirB || dirB.startsWith(`${dirA}/`) || dirA.startsWith(`${dirB}/`);\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 !(sum.lines.pct >= 100 && sum.functions.pct >= 100 && sum.branches.pct >= 100);\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) => jaccard(selfTokens, selectionTokenSet)),\n );\n const chgSim = Math.max(\n 0,\n ...changedTokens.map((changedTokenSet) => jaccard(selfTokens, changedTokenSet)),\n );\n const tstSim = Math.max(0, ...testTokens.map((tset) => jaccard(selfTokens, tset)));\n const nearSelection = selectionAbs.some((selectionPath) =>\n isSameDirOrChild(absNorm, selectionPath),\n );\n const nearChanged = changedAbs.some((changedPath) => isSameDirOrChild(absNorm, changedPath));\n const related = selSim > 0 || chgSim > 0 || nearSelection || nearChanged;\n\n // Use precomputed distance\n const distance = selectionSetAbs.has(absNorm) ? 0 : (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) + Math.round(chgSim * 5) + Math.round(tstSim * 12) + prefixPenalty;\n return { abs: absNorm, rel, linesPct: pct, group, score, distance };\n }),\n );\n // Primary ordering by directness rank using shared relevance helpers\n const prodSeeds = selectionAbs.length > 0 ? selectionAbs : changedAbs;\n const rank = await computeDirectnessRank({ repoRoot: opts.root, productionSeeds: prodSeeds });\n let files = sortPathsWithRank(\n rank,\n scored.map((s) => s.abs),\n );\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 ? process.stdout.rows : 40;\n const perFileRows = opts.pageFit ? Math.max(14, rowsAvail - 1) : 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' ? { maxHotspots: opts.maxHotspots } : {}),\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", "import * as path from 'node:path';\n\nimport { DEFAULT_EXCLUDE } from './args';\nimport { cachedRelated, findRelatedTestsFast, DEFAULT_TEST_GLOBS } from './fast-related';\n\nexport type TestFileResultLike = Readonly<{\n testFilePath: string;\n status?: string;\n testResults?: ReadonlyArray<{ readonly status?: string }>;\n}>;\n\nconst normalizeAbs = (inputPath: string): string => path.resolve(inputPath).replace(/\\\\/g, '/');\n\nconst compareBooleanDesc = (left: boolean, right: boolean): number => {\n if (left === right) {\n return 0;\n }\n return right ? 1 : -1; // true first\n};\n\nconst compareNumberAsc = (left: number, right: number): number => left - right;\n\nconst compareStringAsc = (left: string, right: string): number => left.localeCompare(right);\n\nconst fileFailed = (file: TestFileResultLike): boolean =>\n Boolean(\n (file.status ?? '') === 'failed' ||\n (file.testResults ?? []).some((assertion) => (assertion.status ?? '') === 'failed'),\n );\n\nexport const composeComparators =\n <T>(...comparators: ReadonlyArray<(l: T, r: T) => number>): ((l: T, r: T) => number) =>\n (left: T, right: T) => {\n for (const cmp of comparators) {\n const result = cmp(left, right);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n\nexport const comparatorForRank = (\n rankByPath: ReadonlyMap<string, number>,\n): ((left: TestFileResultLike, right: TestFileResultLike) => number) => {\n const rankOrInf = (absPath: string) =>\n rankByPath.has(absPath) ? (rankByPath.get(absPath) as number) : Number.POSITIVE_INFINITY;\n return composeComparators<TestFileResultLike>(\n (left, right) => compareBooleanDesc(fileFailed(left), fileFailed(right)),\n (left, right) =>\n compareNumberAsc(\n rankOrInf(normalizeAbs(left.testFilePath)),\n rankOrInf(normalizeAbs(right.testFilePath)),\n ),\n (left, right) =>\n compareStringAsc(normalizeAbs(left.testFilePath), normalizeAbs(right.testFilePath)),\n );\n};\n\nexport type DirectnessRankOptions = Readonly<{\n repoRoot: string;\n productionSeeds: ReadonlyArray<string>;\n excludeGlobs?: ReadonlyArray<string>;\n}>;\n\nexport const computeDirectnessRank = async (\n opts: DirectnessRankOptions,\n): Promise<Map<string, number>> => {\n const selectionKey = opts.productionSeeds\n .map((abs) => path.relative(opts.repoRoot, abs).replace(/\\\\/g, '/'))\n .sort((left, right) => left.localeCompare(right))\n .join('|');\n const related = await cachedRelated({\n repoRoot: opts.repoRoot,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot: opts.repoRoot,\n productionPaths: opts.productionSeeds,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: opts.excludeGlobs ?? DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n const out = new Map<string, number>();\n related.forEach((abs, index) => {\n out.set(normalizeAbs(abs), index);\n });\n return out;\n};\n\nexport const sortTestResultsWithRank = <T extends TestFileResultLike>(\n rankByPath: ReadonlyMap<string, number>,\n results: ReadonlyArray<T>,\n): T[] => results.slice().sort(comparatorForRank(rankByPath) as (l: T, r: T) => number);\n\n// Path-only comparator/sorter (for coverage files, etc.)\nexport const comparatorForPathRank = (\n rankByPath: ReadonlyMap<string, number>,\n): ((leftPath: string, rightPath: string) => number) => {\n const rankOrInf = (absPath: string) =>\n rankByPath.has(absPath) ? (rankByPath.get(absPath) as number) : Number.POSITIVE_INFINITY;\n return composeComparators<string>(\n (left, right) =>\n compareNumberAsc(rankOrInf(normalizeAbs(left)), rankOrInf(normalizeAbs(right))),\n (left, right) => compareStringAsc(normalizeAbs(left), normalizeAbs(right)),\n );\n};\n\nexport const sortPathsWithRank = (\n rankByPath: ReadonlyMap<string, number>,\n paths: ReadonlyArray<string>,\n): string[] => paths.slice().sort(comparatorForPathRank(rankByPath));\n", "export const JEST_BRIDGE_REPORTER_SOURCE = `const fs = require('fs');\nconst path = require('path');\n\nconst isObject = (v) => typeof v === 'object' && v !== null;\nconst sanitizeError = (err) => {\n if (!isObject(err)) return err;\n const out = {};\n const name = err.name || (err.constructor && err.constructor.name) || undefined;\n if (name) out.name = String(name);\n if (typeof err.message === 'string') out.message = err.message;\n if (typeof err.stack === 'string') out.stack = err.stack;\n if (err.code !== undefined) out.code = err.code;\n if (err.expected !== undefined) out.expected = err.expected;\n if (err.received !== undefined) out.received = err.received;\n if (err.matcherResult && isObject(err.matcherResult)) {\n const mr = err.matcherResult;\n let messageText;\n try {\n messageText = typeof mr.message === 'function' ? String(mr.message()) : (typeof mr.message === 'string' ? mr.message : undefined);\n } catch {}\n out.matcherResult = {\n matcherName: typeof mr.matcherName === 'string' ? mr.matcherName : undefined,\n message: messageText,\n stack: typeof mr.stack === 'string' ? mr.stack : undefined,\n expected: mr.expected,\n received: mr.received,\n actual: mr.actual,\n pass: typeof mr.pass === 'boolean' ? mr.pass : undefined,\n };\n }\n if (err.cause) {\n out.cause = sanitizeError(err.cause);\n }\n // Copy own enumerable props to preserve custom data\n try {\n for (const key of Object.keys(err)) {\n if (!(key in out)) out[key] = err[key];\n }\n } catch {}\n return out;\n};\nconst sanitizeDetail = (d) => {\n if (typeof d === 'string') return d;\n if (!isObject(d)) return d;\n // Common Jest detail shapes\n const out = {};\n if (d.message) out.message = d.message;\n if (d.stack) out.stack = d.stack;\n if (d.error) out.error = sanitizeError(d.error);\n if (d.matcherResult) out.matcherResult = sanitizeError({ matcherResult: d.matcherResult }).matcherResult;\n if (d.expected !== undefined) out.expected = d.expected;\n if (d.received !== undefined) out.received = d.received;\n // Copy the rest\n try {\n for (const key of Object.keys(d)) {\n if (!(key in out)) out[key] = d[key];\n }\n } catch {}\n return out;\n};\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 failureDetails: (a.failureDetails || []).map(sanitizeDetail),\n });\n this.buf.testResults.push({\n testFilePath: tr.testFilePath,\n status: tr.numFailingTests ? 'failed' : 'passed',\n failureMessage: tr.failureMessage || '',\n failureDetails: (tr.failureDetails || []).map(sanitizeDetail),\n testExecError: tr.testExecError ? sanitizeError(tr.testExecError) : null,\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", "export const JEST_BRIDGE_ENV_SOURCE = `\n'use strict';\n\nconst NodeEnvironment = require('jest-environment-node').TestEnvironment || require('jest-environment-node');\n\nmodule.exports = class BridgeEnv extends NodeEnvironment {\n constructor(config, context) {\n super(config, context);\n const { AsyncLocalStorage } = require('node:async_hooks');\n this._als = new AsyncLocalStorage();\n this._cleanup = [];\n }\n\n _ctx() {\n try { const s = this._als.getStore(); if (s) return s; } catch {}\n try {\n const st = this.global.expect && typeof this.global.expect.getState === 'function' ? this.global.expect.getState() : {};\n return { testPath: st.testPath, currentTestName: st.currentTestName };\n } catch { return {}; }\n }\n\n async setup() {\n await super.setup();\n\n try { Error.stackTraceLimit = Math.max(Error.stackTraceLimit || 10, 50); } catch {}\n\n const print = (payload) => { try { this.global.console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {} };\n const toErr = (x) => { try { return x instanceof Error ? x : new Error(String(x)); } catch { return new Error('unknown'); } };\n\n const onRej = (reason) => {\n const e = toErr(reason);\n const c = this._ctx();\n print({ type: 'unhandledRejection', name: e.name, message: e.message, stack: e.stack, code: e.code ?? undefined, ...c });\n };\n const onExc = (error) => {\n const e = toErr(error);\n const c = this._ctx();\n print({ type: 'uncaughtException', name: e.name, message: e.message, stack: e.stack, code: e.code ?? undefined, ...c });\n };\n\n this.global.process.on('unhandledRejection', onRej);\n this.global.process.on('uncaughtException', onExc);\n this._cleanup.push(() => {\n this.global.process.off('unhandledRejection', onRej);\n this.global.process.off('uncaughtException', onExc);\n });\n\n // Signal environment readiness so we can confirm the custom env loaded\n try { const c = this._ctx(); print({ type: 'envReady', ...c }); } catch {}\n\n try {\n const http = this.global.require ? this.global.require('http') : require('http');\n const originalEmit = http && http.Server && http.Server.prototype && http.Server.prototype.emit;\n if (originalEmit) {\n const MAX = 64 * 1024;\n const asString = (x) => { try { if (typeof x === 'string') return x; if (Buffer.isBuffer(x)) return x.toString('utf8'); return String(x); } catch { return ''; } };\n\n const patched = function(eventName, req, res) {\n try {\n if (eventName === 'request' && req && res && typeof res.write === 'function' && typeof res.end === 'function') {\n const startAt = Date.now();\n const safeHeader = (k) => { try { return req && req.headers ? String((req.headers[k.toLowerCase()] ?? '')) : ''; } catch { return ''; } };\n const reqIdHeader = safeHeader('x-request-id');\n const chunks = [];\n const write = res.write.bind(res);\n const end = res.end.bind(res);\n const method = req.method ? String(req.method) : undefined;\n const url = (req.originalUrl || req.url) ? String(req.originalUrl || req.url) : undefined;\n\n res.write = function(chunk, enc, cb) {\n try { const s = asString(chunk); if (s) chunks.push(s); } catch {}\n return write(chunk, enc, cb);\n };\n res.end = function(chunk, enc, cb) {\n try { const s = asString(chunk); if (s) chunks.push(s); } catch {}\n try {\n const preview = chunks.join('').slice(0, MAX);\n const statusCode = typeof res.statusCode === 'number' ? res.statusCode : undefined;\n const ct = (typeof res.getHeader === 'function' && res.getHeader('content-type')) || undefined;\n const routePath = (req && req.route && req.route.path) || (req && req.baseUrl && req.path ? (req.baseUrl + req.path) : undefined);\n const jsonParsed = (() => { try { return JSON.parse(preview); } catch { return undefined; } })();\n const requestId = reqIdHeader || (jsonParsed && typeof jsonParsed === 'object' ? (jsonParsed.requestId || jsonParsed.reqId || '') : '');\n const ctx = (global.__JEST_BRIDGE_ENV_REF && global.__JEST_BRIDGE_ENV_REF._ctx) ? global.__JEST_BRIDGE_ENV_REF._ctx() : {};\n const payload = {\n type: 'httpResponse',\n timestampMs: Date.now(),\n durationMs: Math.max(0, Date.now() - startAt),\n method, url, statusCode,\n route: routePath ? String(routePath) : undefined,\n contentType: ct ? String(ct) : undefined,\n headers: (typeof res.getHeaders === 'function') ? res.getHeaders() : undefined,\n requestId: requestId ? String(requestId) : undefined,\n bodyPreview: preview,\n json: jsonParsed,\n testPath: ctx.testPath, currentTestName: ctx.currentTestName,\n };\n try {\n if (!global.__JEST_HTTP_EVENTS__) global.__JEST_HTTP_EVENTS__ = [];\n const arr = global.__JEST_HTTP_EVENTS__;\n arr.push({ timestampMs: payload.timestampMs, durationMs: payload.durationMs, method: payload.method, url: payload.url, route: payload.route, statusCode: payload.statusCode, contentType: payload.contentType, requestId: payload.requestId, json: payload.json, bodyPreview: payload.bodyPreview });\n if (arr.length > 25) arr.splice(0, arr.length - 25);\n } catch {}\n try { console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {}\n } catch {}\n return end(chunk, enc, cb);\n };\n try {\n res.on('close', function onClose() {\n try {\n const ended = typeof res.writableEnded === 'boolean' ? res.writableEnded : false;\n if (!ended) {\n const routePath = (req && req.route && req.route.path) || (req && req.baseUrl && req.path ? (req.baseUrl + req.path) : undefined);\n const ctx = (global.__JEST_BRIDGE_ENV_REF && global.__JEST_BRIDGE_ENV_REF._ctx) ? global.__JEST_BRIDGE_ENV_REF._ctx() : {};\n const payload = {\n type: 'httpAbort',\n timestampMs: Date.now(),\n durationMs: Math.max(0, Date.now() - startAt),\n method, url,\n route: routePath ? String(routePath) : undefined,\n testPath: ctx.testPath, currentTestName: ctx.currentTestName,\n };\n try { console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {}\n }\n } catch {}\n });\n } catch {}\n }\n } catch {}\n return originalEmit.apply(this, arguments);\n };\n\n try { this.global.__JEST_BRIDGE_ENV_REF = this; } catch {}\n http.Server.prototype.emit = patched;\n\n this._cleanup.push(() => {\n try { if (http.Server && http.Server.prototype) http.Server.prototype.emit = originalEmit; } catch {}\n try { delete this.global.__JEST_BRIDGE_ENV_REF; } catch {}\n });\n }\n } catch {}\n\n // Wrap test functions to emit rich assertion events on failures\n try {\n const g = this.global;\n const ctxFn = () => {\n try {\n const ref = g.__JEST_BRIDGE_ENV_REF;\n return ref && typeof ref._ctx === 'function' ? ref._ctx() : {};\n } catch { return {}; }\n };\n const emitAssertion = (err) => {\n try {\n const e = toErr(err);\n const mr = e && typeof e === 'object' && e.matcherResult ? e.matcherResult : undefined;\n const messageText = (() => { try { return mr && typeof mr.message === 'function' ? String(mr.message()) : (e.message || ''); } catch { return e.message || ''; } })();\n const expectedPreview = (() => { try { return mr && mr.expected !== undefined ? JSON.stringify(mr.expected, null, 2) : undefined; } catch { return undefined; } })();\n const actualPreview = (() => { try { return mr && mr.received !== undefined ? JSON.stringify(mr.received, null, 2) : undefined; } catch { return undefined; } })();\n const c = ctxFn();\n const expectedRaw = (() => { try { return mr?.expected; } catch { return undefined; } })();\n const receivedRaw = (() => { try { return mr?.received; } catch { return undefined; } })();\n print({\n type: 'assertionFailure',\n timestampMs: Date.now(),\n matcher: mr && typeof mr.matcherName === 'string' ? mr.matcherName : undefined,\n expectedPreview,\n actualPreview,\n expectedNumber: typeof expectedRaw === 'number' ? expectedRaw : undefined,\n receivedNumber: typeof receivedRaw === 'number' ? receivedRaw : undefined,\n message: messageText,\n stack: e.stack,\n ...c,\n });\n } catch {}\n };\n const wrap = (orig) => {\n if (!orig || typeof orig !== 'function') return orig;\n const wrapped = function(name, fn, timeout) {\n if (typeof fn !== 'function') return orig.call(this, name, fn, timeout);\n const run = function() {\n try {\n const res = fn.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n return res.catch((err) => { emitAssertion(err); throw err; });\n }\n return res;\n } catch (err) {\n emitAssertion(err);\n throw err;\n }\n };\n return orig.call(this, name, run, timeout);\n };\n try { wrapped.only = orig.only && typeof orig.only === 'function' ? wrap(orig.only) : orig.only; } catch {}\n try { wrapped.skip = orig.skip && typeof orig.skip === 'function' ? wrap(orig.skip) : orig.skip; } catch {}\n return wrapped;\n };\n try { g.it = wrap(g.it); } catch {}\n try { g.test = wrap(g.test); } catch {}\n } catch {}\n }\n\n async handleTestEvent(evt, state) {\n if (evt.name === 'test_start') {\n const store = { testPath: state.testPath, currentTestName: evt.test.name };\n try { this._als.enterWith(store); } catch {}\n } else if (evt.name === 'test_done') {\n try { this._als.enterWith({}); } catch {}\n try {\n const events = Array.isArray(global.__JEST_HTTP_EVENTS__) ? global.__JEST_HTTP_EVENTS__ : [];\n if (events.length) {\n const batch = events.slice(-10);\n const payload = { type: 'httpResponseBatch', events: batch, testPath: state.testPath, currentTestName: evt.test.name };\n try { this.global.console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {}\n try { global.__JEST_HTTP_EVENTS__ = []; } catch {}\n }\n } catch {}\n }\n }\n\n async teardown() {\n for (let i = this._cleanup.length - 1; i >= 0; i--) {\n try { this._cleanup[i](); } catch {}\n }\n await super.teardown();\n }\n};\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", "// Minimal Haskell-style toolkit (no effects, all named exports)\nexport type Fn<A, B> = (a: A) => B;\n\n// Heteromorphic pipe: allows A -> B -> C ... with overloads\nexport function pipe<A>(a: A): A;\nexport function pipe<A, B>(a: A, ab: Fn<A, B>): B;\nexport function pipe<A, B, C>(a: A, ab: Fn<A, B>, bc: Fn<B, C>): C;\nexport function pipe<A, B, C, D>(a: A, ab: Fn<A, B>, bc: Fn<B, C>, cd: Fn<C, D>): D;\nexport function pipe<A, B, C, D, E>(\n a: A,\n ab: Fn<A, B>,\n bc: Fn<B, C>,\n cd: Fn<C, D>,\n de: Fn<D, E>,\n): E;\nexport function pipe<A, B, C, D, E, F>(\n a: A,\n ab: Fn<A, B>,\n bc: Fn<B, C>,\n cd: Fn<C, D>,\n de: Fn<D, E>,\n ef: Fn<E, F>,\n): F;\nexport function pipe(initial: unknown, ...fns: ReadonlyArray<Fn<unknown, unknown>>): unknown {\n return fns.reduce((acc, fn) => fn(acc), initial);\n}\n\nexport function flow<A, B>(ab: Fn<A, B>): Fn<A, B>;\nexport function flow<A, B, C>(ab: Fn<A, B>, bc: Fn<B, C>): Fn<A, C>;\nexport function flow<A, B, C, D>(ab: Fn<A, B>, bc: Fn<B, C>, cd: Fn<C, D>): Fn<A, D>;\nexport function flow<A, B, C, D, E>(\n ab: Fn<A, B>,\n bc: Fn<B, C>,\n cd: Fn<C, D>,\n de: Fn<D, E>,\n): Fn<A, E>;\nexport function flow(...fns: ReadonlyArray<Fn<unknown, unknown>>) {\n return (input: unknown) => fns.reduce((acc, fn) => fn(acc), input);\n}\n\nexport type Option<A> = { readonly tag: 'Some'; readonly value: A } | { readonly tag: 'None' };\nexport const some = <A>(value: A): Option<A> => ({ tag: 'Some', value });\nexport const none: Option<never> = { tag: 'None' };\nexport const fromNullable = <A>(value: A | null | undefined): Option<A> =>\n value == null ? none : some(value);\nexport const mapOption =\n <A, B>(mapFn: (input: A) => B) =>\n (option: Option<A>): Option<B> =>\n option.tag === 'Some' ? some(mapFn(option.value)) : none;\nexport const flatMapOption =\n <A, B>(bindFn: (input: A) => Option<B>) =>\n (option: Option<A>): Option<B> =>\n option.tag === 'Some' ? bindFn(option.value) : none;\nexport const getOrElseOption =\n <A>(onNone: () => A) =>\n (option: Option<A>): A =>\n option.tag === 'Some' ? option.value : onNone();\n\nexport type Result<E, A> =\n | { readonly tag: 'Ok'; readonly value: A }\n | { readonly tag: 'Err'; readonly error: E };\nexport const ok = <A>(value: A): Result<never, A> => ({ tag: 'Ok', value });\nexport const err = <E>(error: E): Result<E, never> => ({ tag: 'Err', error });\nexport const mapResult =\n <E, A, B>(mapFn: (input: A) => B) =>\n (result: Result<E, A>): Result<E, B> =>\n result.tag === 'Ok' ? ok(mapFn(result.value)) : result;\nexport const flatMapResult =\n <E, A, B>(bindFn: (input: A) => Result<E, B>) =>\n (result: Result<E, A>): Result<E, B> =>\n result.tag === 'Ok' ? bindFn(result.value) : result;\n\nexport const unfoldr = <S, A>(\n initial: S,\n step: (state: S) => Option<readonly [A, S]>,\n): ReadonlyArray<A> => {\n const out: A[] = [];\n // eslint-disable-next-line no-constant-condition\n for (let state = initial; ; ) {\n const result = step(state);\n if (result.tag === 'None') {\n break;\n }\n const [element, next] = result.value;\n out.push(element);\n state = next;\n }\n return out;\n};\n", "import { some, none, unfoldr } from '../fp';\nimport type { Chunk } from './model';\nimport { stripAnsiSimple, isStackLine } from '../stacks';\n\nconst isFailureStart = (lineText: string) => /^\\s*\u25CF\\s+/.test(lineText);\nconst isSuiteLine = (lineText: string) => /^\\s*(PASS|FAIL)\\s+/.test(lineText);\nconst isSummaryLine = (lineText: string) =>\n /^\\s*(Test Suites:|Tests:|Snapshots:|Time:|Ran all)/.test(lineText);\n\nconst collectFailure = (\n allLines: ReadonlyArray<string>,\n startIndex: number,\n): readonly [Chunk, number] => {\n const title = stripAnsiSimple(allLines[startIndex]!)\n .replace(/^\\s*\u25CF\\s+/, '')\n .trim();\n const buf: string[] = [allLines[startIndex]!];\n let i = startIndex + 1;\n for (; i < allLines.length; i += 1) {\n const simple = stripAnsiSimple(allLines[i]!);\n const nextIsStart = isFailureStart(simple) || isSuiteLine(simple) || isSummaryLine(simple);\n const prevBlank = stripAnsiSimple(allLines[i - 1] ?? '').trim() === '';\n if (nextIsStart && prevBlank) {\n break;\n }\n buf.push(allLines[i]!);\n }\n return [{ tag: 'FailureBlock', title, lines: buf }, i];\n};\n\nconst parseSuite = (lineText: string): Chunk => {\n const match = lineText.match(/^\\s*(PASS|FAIL)\\s+(.+)$/)!;\n return { tag: 'PassFail', badge: match[1] as 'PASS' | 'FAIL', rel: match[2]! };\n};\n\nexport const parseChunks = (raw: string): ReadonlyArray<Chunk> => {\n const lines = raw.split(/\\r?\\n/);\n type State = { readonly index: number };\n return unfoldr<State, Chunk>({ index: 0 }, (state) => {\n if (state.index >= lines.length) {\n return none;\n }\n const line = lines[state.index]!;\n const simple = stripAnsiSimple(line);\n if (isFailureStart(simple)) {\n const [chunk, next] = collectFailure(lines, state.index);\n return some([chunk, { index: next }]);\n }\n if (isSuiteLine(simple)) {\n return some([parseSuite(simple), { index: state.index + 1 }]);\n }\n if (isSummaryLine(simple)) {\n return some([{ tag: 'Summary', line }, { index: state.index + 1 }]);\n }\n if (isStackLine(simple)) {\n return some([{ tag: 'Stack', line }, { index: state.index + 1 }]);\n }\n return some([{ tag: 'Other', line }, { index: state.index + 1 }]);\n });\n};\n", "import * as path from 'node:path';\n\nimport type { Chunk, Ctx, PrettyFns } from './model';\nimport { ansi } from '../ansi';\nimport { Colors } from '../colors';\nimport { collapseStacks, firstTestLocation, stripAnsiSimple, isStackLine } from '../stacks';\nimport { colorStackLine } from './fns';\n\nconst relPath = (abs: string, cwd: string) => abs.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n\nexport const renderChunks = (\n chunks: ReadonlyArray<Chunk>,\n ctx: Ctx,\n fns: PrettyFns,\n opts?: { readonly onlyFailures?: boolean },\n): { readonly text: string; readonly hadParsed: boolean } => {\n const out: string[] = [];\n const seenFiles = new Set<string>();\n const seenFailures = new Set<string>();\n const onlyFailures = Boolean(opts?.onlyFailures);\n let currentRelFile: string | null = null;\n\n const escapeRegExp = (text: string): string => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n for (const ch of chunks) {\n if (ch.tag === 'PassFail') {\n const rel = relPath(ch.rel, ctx.cwd);\n if (seenFiles.has(rel)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n seenFiles.add(rel);\n currentRelFile = rel;\n if (!(onlyFailures && ch.badge === 'PASS')) {\n out.push(fns.buildFileBadgeLine(rel, ch.badge === 'FAIL' ? 1 : 0));\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n if (ch.tag === 'FailureBlock') {\n out.push(fns.drawFailLine());\n const location = firstTestLocation(ch.lines, ctx.projectHint);\n const rel = location ? relPath(location.split(':')[0] ?? '', ctx.cwd) : '';\n const headerText = rel ? `${rel} > ${ch.title}` : ch.title;\n out.push(`${Colors.Failure('\u00D7')} ${ansi.white(headerText)}`);\n\n const codeStart = fns.findCodeFrameStart(ch.lines);\n const collapsedForSrc = collapseStacks(ch.lines.slice(0));\n const deepestLoc = fns.deepestProjectLoc(collapsedForSrc, ctx.projectHint);\n let effectiveLoc = deepestLoc;\n if (!effectiveLoc && currentRelFile) {\n try {\n const abs = path.resolve(ctx.cwd, currentRelFile);\n const source = ctx.readSource(abs);\n const testName = (() => {\n const parts = ch.title.split('>');\n return (parts[parts.length - 1] || ch.title).trim();\n })();\n const itRe = new RegExp(\n String.raw`\\b(?:it|test)\\s*\\(\\s*['\\\"]${escapeRegExp(testName)}['\\\"]`,\n );\n let index = source.findIndex((line) => itRe.test(line));\n if (index < 0) {\n // fallback: search for expect within file to give some context\n index = source.findIndex((line) => /\\bexpect\\s*\\(/.test(line));\n } else {\n // try to find first expect within the test block window (~80 lines)\n const windowEnd = Math.min(source.length, index + 80);\n for (let i = index; i < windowEnd; i += 1) {\n if (/\\bexpect\\s*\\(/.test(source[i]!)) {\n index = i;\n break;\n }\n }\n }\n if (index >= 0) {\n effectiveLoc = { file: abs.replace(/\\\\/g, '/'), line: index + 1 };\n }\n } catch {\n /* ignore source fallback errors */\n }\n }\n\n if (codeStart >= 0) {\n out.push('', ...fns.buildCodeFrameSection(ch.lines, ctx, effectiveLoc), '');\n } else {\n out.push('', ...fns.buildCodeFrameSection(ch.lines, ctx, effectiveLoc), '');\n }\n const pretty = fns.buildPrettyDiffSection(undefined, ch.lines);\n out.push(...pretty);\n const hasPretty = pretty.length > 0;\n const details = fns.linesFromDetails(undefined);\n // If we found almost no info, synthesize a minimal message section by scanning for\n // non-empty non-stack lines around the code frame / first hint line\n const minimal = (() => {\n const plain = ch.lines.map((ln) => stripAnsiSimple(ln));\n const hint = plain.findIndex(\n (lineText) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(lineText) || /\\bError:?\\b/.test(lineText),\n );\n const acc: string[] = [];\n const start = hint >= 0 ? hint : 0;\n for (let i = start; i < plain.length; i += 1) {\n const ln = plain[i]!;\n if (!ln.trim()) {\n break;\n }\n if (isStackLine(ln)) {\n break;\n }\n acc.push(ln);\n }\n return acc;\n })();\n const collapsedForTail = collapseStacks(ch.lines.slice(0));\n const stackPreview = ctx.showStacks\n ? collapsedForTail\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .filter((ln) => ctx.projectHint.test(stripAnsiSimple(ln)))\n .slice(0, 2)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`)\n : [];\n out.push(\n ...fns.buildMessageSection(minimal.length ? minimal : ch.lines, details, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n if (minimal.length === 0 && fns.buildFallbackMessageBlock) {\n out.push(...fns.buildFallbackMessageBlock(ch.lines, { messages: details.messages }));\n }\n // Extract inline console errors when present in raw output\n const consoleInline = (() => {\n const plain = ch.lines.map((ln) => stripAnsiSimple(ln));\n const cand = plain\n .filter((ln) => /\\bconsole\\.(error|warn)\\s*\\(/i.test(ln) || /^\\s*Error:/.test(ln))\n .map((ln) => ln.trim())\n .filter((ln) => ln.length > 0)\n .sort((a, b) => b.length - a.length)\n .slice(0, 3);\n return cand;\n })();\n if (consoleInline.length > 0) {\n out.push(ansi.dim(' Console errors:'), ...consoleInline.map((ln) => ` ${ln}`), '');\n }\n if (ctx.showStacks && fns.buildStackSection && stackPreview.length === 0) {\n const collapsed = collapseStacks(ch.lines.slice(0));\n out.push(...fns.buildStackSection(collapsed, ctx));\n }\n out.push(fns.drawFailLine(), '');\n if (rel) {\n seenFailures.add(`${rel}|${ch.title}`);\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n if (ch.tag === 'Summary') {\n out.push(ch.line);\n // eslint-disable-next-line no-continue\n continue;\n }\n if (ch.tag === 'Stack') {\n if (ctx.showStacks) {\n out.push(ch.line);\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n // Hide miscellaneous non-failure lines when onlyFailures is true\n if (!onlyFailures) {\n out.push(ch.line);\n }\n }\n const hadParsed =\n seenFiles.size > 0 ||\n seenFailures.size > 0 ||\n out.some((lineText) => /^(?:\\s*)(PASS|FAIL)\\b/.test(stripAnsiSimple(lineText)));\n return { text: out.join('\\n'), hadParsed };\n};\n", "import * 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 { stripAnsiSimple, isStackLine } from '../stacks';\nimport { preferredEditorHref } from '../paths';\nimport type { PrettyFns } from './model';\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\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\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 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\n// ---- Rich helpers (ported/simplified to match old behavior) ----\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport const colorStackLine = (line: string, projectHint: RegExp): string => {\n const plainLine = stripAnsiSimple(line);\n if (!/\\s+at\\s+/.test(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 extractBridgePath = (raw: string, cwd: string): string | null => {\n const re = /Test results written to:\\s+([^\\n\\r]+jest-bridge-[^\\s'\"]+\\.json)/g;\n const matches = Array.from(raw.matchAll(re));\n if (matches.length === 0) {\n return null;\n }\n const jsonPath = (matches[matches.length - 1]![1] ?? '').trim().replace(/^[\"'`]|[\"'`]$/g, '');\n return /^\\//.test(jsonPath) ? jsonPath : `${cwd.replace(/\\\\/g, '/')}/${jsonPath}`;\n};\n\nexport const findCodeFrameStart = (lines: readonly string[]): number =>\n lines.findIndex((line) => /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(line)));\n\nconst _sourceCache = new Map<string, readonly string[]>();\nconst readSource = (file: string): readonly string[] => {\n const normalized = file.replace(/\\\\/g, '/');\n const hit = _sourceCache.get(normalized);\n if (hit) {\n return hit;\n }\n try {\n const arr = fs.readFileSync(normalized, 'utf8').split(/\\r?\\n/);\n _sourceCache.set(normalized, arr);\n return arr;\n } catch {\n return [];\n }\n};\n\nconst renderInlineCodeFrame = (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(` ${Colors.Failure(raw.trimEnd())}`);\n } else {\n const ptr = raw.match(/^\\s*>(\\s*\\d+)\\s*\\|\\s?(.*)$/);\n if (ptr) {\n const num = ansi.dim(ptr[1]!.trim());\n const code = ansi.yellow(ptr[2] ?? '');\n out.push(` ${Colors.Failure('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n const nor = raw.match(/^\\s*(\\d+)\\s*\\|\\s?(.*)$/);\n if (nor) {\n const num = ansi.dim(nor[1]!);\n const code = ansi.dim(nor[2] ?? '');\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${raw}`);\n }\n }\n }\n }\n return out;\n};\n\nconst renderSourceCodeFrame = (file: string, line: number, context = 3): string[] => {\n const lines = readSource(file);\n if (lines.length === 0 || !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 const out: string[] = [];\n for (let current = start; current <= end; current += 1) {\n const num = ansi.dim(String(current));\n const code =\n current === idx ? ansi.yellow(lines[current - 1] ?? '') : ansi.dim(lines[current - 1] ?? '');\n if (current === idx) {\n out.push(` ${Colors.Failure('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n }\n }\n out.push(` ${Colors.Failure('^')}`);\n return out;\n};\n\nconst stackLocation = (line: string): { file: string; line: number } | null => {\n const match = stripAnsiSimple(line).match(/\\(?([^\\s()]+):(\\d+):\\d+\\)?$/);\n if (!match) {\n return null;\n }\n return { file: match[1]!.replace(/\\\\/g, '/'), line: Number(match[2]!) };\n};\n\nexport const deepestProjectLoc: PrettyFns['deepestProjectLoc'] = (stackLines, projectHint) => {\n for (let i = stackLines.length - 1; i >= 0; i -= 1) {\n const simple = stripAnsiSimple(stackLines[i]!);\n if (\n isStackLine(simple) &&\n projectHint.test(simple) &&\n !/node_modules|vitest|jest/.test(simple)\n ) {\n return stackLocation(stackLines[i]!);\n }\n }\n return null;\n};\n\nexport const buildCodeFrameSection: PrettyFns['buildCodeFrameSection'] = (\n messageLines,\n ctx,\n synthLoc,\n): string[] => {\n const out: string[] = [];\n const start = findCodeFrameStart(messageLines);\n if (start >= 0) {\n out.push(...renderInlineCodeFrame(messageLines, start), '');\n return out;\n }\n if (ctx.showStacks && synthLoc) {\n out.push(...renderSourceCodeFrame(synthLoc.file, synthLoc.line), '');\n }\n return out;\n};\n\nconst normalizeBlock = (raw: string) =>\n raw\n .replace(/^\\s*Array\\s*\\[/, '[')\n .replace(/^\\s*Object\\s*\\{/, '{')\n .replace(/,(\\s*[\\]}])/g, '$1');\n\nconst stringifyPrettierish = (value: unknown): string => {\n if (typeof value === 'string') {\n const text = normalizeBlock(value.trim());\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return value;\n }\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return util.inspect(value, {\n depth: 10,\n breakLength: Infinity,\n compact: false,\n sorted: true,\n });\n }\n }\n return util.inspect(value, {\n depth: 10,\n breakLength: Infinity,\n compact: false,\n sorted: true,\n });\n};\n\nconst isArrayOfPrimitives = (\n value: unknown,\n): value is ReadonlyArray<string | number | boolean | null> =>\n Array.isArray(value) &&\n value.every(\n (element) => ['string', 'number', 'boolean'].includes(typeof element) || element === null,\n );\n\nconst extractFromUnifiedDiff = (\n rawLines: readonly string[],\n): { expected?: string; received?: string } => {\n const lines = (rawLines ?? []).map((lineText) => stripAnsiSimple(lineText));\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 const expectedParts: string[] = [];\n const receivedParts: string[] = [];\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 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 if (!opened) {\n const looksLikeStart = /^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(unsigned);\n if (!looksLikeStart) {\n // eslint-disable-next-line no-continue\n continue;\n }\n opened = true;\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 if (!expDone && expectedParts.length > 0) {\n expDone = canParseJsonish(expectedParts.join('\\n'));\n }\n if (!recDone && receivedParts.length > 0) {\n recDone = canParseJsonish(receivedParts.join('\\n'));\n }\n if (opened && expDone && recDone) {\n break;\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 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\nconst extractExpectedReceived = (\n details?: readonly unknown[],\n lines?: readonly string[],\n): { expected?: unknown; received?: unknown } => {\n if (details) {\n for (const detail of details) {\n const dict = isObjectRecord(detail) ? (detail as Record<string, unknown>) : undefined;\n const matcher =\n dict && isObjectRecord(dict.matcherResult)\n ? (dict.matcherResult as Record<string, unknown>)\n : undefined;\n if (matcher) {\n const expectedValue = (matcher as Record<string, unknown>).expected;\n const receivedValue = (matcher as Record<string, unknown>).received;\n // Special-case common Jest matchers to recover clearer numbers/labels\n const matcherName = String(\n ((matcher as Record<string, unknown>).matcherName as unknown) || '',\n );\n if (matcherName === 'toHaveBeenCalledTimes' || matcherName === 'toBeCalledTimes') {\n const getCallsCount = (actual: unknown): number | undefined => {\n if (\n isObjectRecord(actual) &&\n Array.isArray((actual as Record<string, unknown>).calls)\n ) {\n return ((actual as Record<string, unknown>).calls as unknown[]).length;\n }\n if (typeof actual === 'number') {\n return actual;\n }\n if (Array.isArray(actual)) {\n return actual.length;\n }\n return undefined;\n };\n const expectedNumber = getCallsCount(expectedValue);\n const actualValue = (matcher as Record<string, unknown>).actual ?? receivedValue;\n const receivedNumber = getCallsCount(actualValue);\n if (expectedNumber !== undefined || receivedNumber !== undefined) {\n return { expected: expectedNumber, received: receivedNumber };\n }\n }\n // Only trust failureDetails when both sides are provided; otherwise\n // prefer parsing the message lines to avoid showing \"undefined\".\n if (expectedValue !== undefined && receivedValue !== undefined) {\n return { expected: expectedValue, received: receivedValue };\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 // eslint-disable-next-line no-continue\n continue;\n }\n if (/^\\s*Received:/.test(simple)) {\n mode = 'rec';\n receivedLines.push(simple.replace(/^\\s*Received:\\s*/, ''));\n // eslint-disable-next-line no-continue\n continue;\n }\n if (/^\\s*[-+]\\s/.test(simple)) {\n // eslint-disable-next-line no-continue\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 const buildPrettyDiffSection = (\n details?: readonly unknown[],\n messageLines?: readonly string[],\n): string[] => {\n const payload = extractExpectedReceived(details, messageLines);\n if (payload.expected === undefined && payload.received === undefined) {\n return [];\n }\n const expectedString = stringifyPrettierish(payload.expected);\n const receivedString = stringifyPrettierish(payload.received);\n const out: string[] = [];\n const expectedLenLabel = Array.isArray(payload.expected)\n ? ansi.dim(` (len ${(payload.expected as readonly unknown[]).length})`)\n : '';\n out.push(` ${ansi.bold('Expected')}${expectedLenLabel}`);\n out.push(\n expectedString\n .split('\\n')\n .map((expectedLine) => ` ${Colors.Success(expectedLine)}`)\n .join('\\n'),\n );\n const receivedLenLabel = Array.isArray(payload.received)\n ? ansi.dim(` (len ${(payload.received as readonly unknown[]).length})`)\n : '';\n out.push(` ${ansi.bold('Received')}${receivedLenLabel}`);\n out.push(\n receivedString\n .split('\\n')\n .map((receivedLine) => ` ${Colors.Failure(receivedLine)}`)\n .join('\\n'),\n );\n // Optional difference summary for arrays of primitives\n if (isArrayOfPrimitives(payload.expected) && isArrayOfPrimitives(payload.received)) {\n const expectedSet = new Set(\n (payload.expected as ReadonlyArray<unknown>).map((element) => String(element)),\n );\n const receivedSet = new Set(\n (payload.received as ReadonlyArray<unknown>).map((element) => String(element)),\n );\n const missing = Array.from(expectedSet).filter((element) => !receivedSet.has(element));\n const unexpected = Array.from(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:')} ${Colors.Failure(parts.join(ansi.dim(' | ')))}`);\n }\n }\n out.push('');\n return out;\n};\n\nexport const buildMessageSection = (\n messageLines: readonly string[],\n details: { stacks: string[]; messages: string[] },\n _ctx: { projectHint: RegExp; editorCmd: string | undefined; showStacks: boolean },\n opts?: { suppressDiff?: boolean; stackPreview?: readonly string[] },\n): string[] => {\n const out: string[] = [];\n const lines = messageLines.map((lineText) => stripAnsiSimple(lineText));\n const hintIdx = lines.findIndex(\n (candidate) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(candidate) ||\n /\\b(?:AssertionError|Error):/.test(candidate),\n );\n const acc: string[] = [];\n if (hintIdx >= 0) {\n acc.push(lines[hintIdx]!);\n }\n const pushBlock = (start: number) => {\n acc.push(lines[start]!);\n for (let i = start + 1; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (!candidate.trim() || isStackLine(candidate)) {\n break;\n }\n acc.push(candidate);\n }\n };\n const expectedIdx = lines.findIndex((lineText) => /^\\s*Expected:/.test(lineText));\n const receivedIdx = lines.findIndex((lineText) => /^\\s*Received:/.test(lineText));\n const diffIdx = lines.findIndex((lineText) =>\n /^\\s*(?:- Expected|\\+ Received|Difference:)/.test(lineText),\n );\n if (expectedIdx >= 0) {\n pushBlock(expectedIdx);\n }\n if (receivedIdx >= 0) {\n pushBlock(receivedIdx);\n }\n if (diffIdx >= 0) {\n pushBlock(diffIdx);\n }\n const filtered = opts?.suppressDiff\n ? acc.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 : acc;\n const hasOnlyBareError =\n filtered.length === 0 ||\n (filtered.length === 1 && /^\\s*(?:Error|AssertionError):?\\s*$/.test(filtered[0] ?? ''));\n // Fallback: when we only captured a bare \"Error:\" line (regression case),\n // include the immediate non-empty non-stack lines following the hint and any detailed messages\n const fallbackLines: string[] = [];\n if (hasOnlyBareError) {\n const startFrom = hintIdx >= 0 ? hintIdx + 1 : 0;\n for (let i = startFrom; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (!candidate.trim()) {\n break;\n }\n if (isStackLine(candidate)) {\n break;\n }\n fallbackLines.push(candidate);\n }\n if (fallbackLines.length === 0 && details && details.messages && details.messages.length) {\n // Use messages extracted from failureDetails as a secondary fallback\n fallbackLines.push(\n ...details.messages\n .map((messageText) => stripAnsiSimple(messageText))\n .filter((messageText) => messageText.trim().length > 0)\n .slice(0, 6),\n );\n }\n }\n if (filtered.length > 0) {\n const label = (() => {\n const joined = filtered.join(' ');\n const matchResult =\n joined.match(/\\b(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/) ||\n joined.match(/\\bError\\b/);\n if (matchResult) {\n const typeName = (matchResult[1] as string | undefined) ?? 'Error';\n return `${typeName}:`;\n }\n return /expect\\(.+?\\)\\.(?:to|not\\.)/.test(joined) ? 'Assertion:' : 'Message:';\n })();\n out.push(` ${ansi.bold(label)}`);\n const body = hasOnlyBareError ? fallbackLines : filtered;\n for (const lineText of body) {\n const colored = /^\\s*-\\s/.test(lineText)\n ? Colors.Failure(lineText)\n : /^\\s*\\+\\s/.test(lineText)\n ? Colors.Success(lineText)\n : lineText;\n out.push(` ${ansi.yellow(colored)}`);\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\nexport const linesFromDetails = (\n details: readonly unknown[] | undefined,\n): { stacks: string[]; messages: string[] } => {\n const stacks: string[] = [];\n const messages: string[] = [];\n if (!details) {\n return { stacks, messages };\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 const visitDeep = (value: unknown, depth: number): void => {\n if (depth > 3 || value == null) {\n return;\n }\n if (typeof value === 'string') {\n pushMaybe(value, messages);\n return;\n }\n if (typeof value !== 'object') {\n return;\n }\n const obj = value as Record<string, unknown>;\n // Common error-like shapes\n if (typeof obj.message === 'string') {\n pushMaybe(obj.message, messages);\n }\n if (typeof obj.stack === 'string') {\n pushMaybe(obj.stack, stacks);\n }\n if (typeof obj.expected === 'string') {\n pushMaybe(obj.expected, messages);\n }\n if (typeof obj.received === 'string') {\n pushMaybe(obj.received, messages);\n }\n const arrays = ['errors', 'causes', 'aggregatedErrors'];\n for (const key of arrays) {\n const arr = obj[key as keyof typeof obj] as unknown;\n if (Array.isArray(arr)) {\n for (const element of arr) {\n visitDeep(element, depth + 1);\n }\n }\n }\n const nestedCandidates = ['error', 'cause', 'matcherResult'];\n for (const key of nestedCandidates) {\n if (obj[key] && typeof obj[key] === 'object') {\n visitDeep(obj[key], depth + 1);\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 } else if (isObjectRecord(detail)) {\n pushMaybe(detail.stack, stacks);\n pushMaybe(detail.message, messages);\n const err = isObjectRecord(detail.error)\n ? (detail.error as Record<string, unknown>)\n : undefined;\n if (err) {\n pushMaybe(err.stack, stacks);\n pushMaybe(err.message, messages);\n }\n const matcher = isObjectRecord(detail.matcherResult)\n ? (detail.matcherResult as Record<string, unknown>)\n : undefined;\n if (matcher) {\n pushMaybe(matcher.stack, stacks);\n pushMaybe(matcher.message, messages);\n pushMaybe(matcher.expected, messages);\n pushMaybe(matcher.received, messages);\n }\n // Deep search for any nested message/stack when standard fields are absent\n if (messages.length === 0 && stacks.length === 0) {\n visitDeep(detail, 0);\n }\n }\n }\n return { stacks, messages };\n};\n\nexport const buildStackSection = (\n mergedForStack: readonly string[],\n ctx: { projectHint: RegExp; editorCmd?: string; showStacks: boolean },\n fallbackLoc?: { file: string; line: number } | 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 onlyStack = mergedForStack.filter((lineText: string) =>\n isStackLine(stripAnsiSimple(lineText)),\n );\n const tail = onlyStack.slice(-4);\n if (tail.length) {\n for (const frameLine of tail) {\n out.push(` ${colorStackLine(String(frameLine), ctx.projectHint)}`);\n }\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(`${loc.file.split('/').pop()}:${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\nconst MAX_CONSOLE_ERRORS_TO_SHOW = 3;\n\ntype ConsoleEntry = Readonly<{\n type?: unknown;\n message?: unknown;\n origin?: unknown;\n}>;\n\nconst isConsoleEntry = (candidate: unknown): candidate is ConsoleEntry =>\n typeof candidate === 'object' && candidate !== null;\n\nexport const buildConsoleSection = (maybeConsole: unknown): string[] => {\n const out: string[] = [];\n if (!Array.isArray(maybeConsole)) {\n return out;\n }\n const entries = maybeConsole.filter(isConsoleEntry);\n const errorsOnly = entries.filter((entry) => String(entry?.type ?? '').toLowerCase() === 'error');\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\n// Fallback message extraction when assertion messages are sparse or just \"Error:\"\nexport const buildFallbackMessageBlock = (\n messageLines: readonly string[],\n details: { messages: readonly string[] },\n): string[] => {\n const normalize = (arr: readonly string[]) =>\n arr.map((lineText) => stripAnsiSimple(lineText)).filter((line) => line.trim().length > 0);\n const normalized = normalize(messageLines);\n const informative = normalized.filter((line) => !/^\\s*(?:Error|AssertionError):?\\s*$/.test(line));\n // If caller already has informative lines, they don't need this fallback\n if (informative.length > 0) {\n return [];\n }\n const errorIdx = normalized.findIndex((line) =>\n /(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError|Error):?/.test(line),\n );\n const collected: string[] = [];\n if (errorIdx >= 0) {\n for (let i = errorIdx; i < normalized.length && collected.length < 8; i += 1) {\n const ln = normalized[i]!;\n if (!ln.trim()) {\n break;\n }\n if (isStackLine(ln)) {\n break;\n }\n collected.push(ln);\n }\n }\n const fromDetails = collected.length > 0 ? [] : normalize(details.messages).slice(0, 6);\n const linesToShow = collected.length > 0 ? collected : fromDetails;\n if (linesToShow.length === 0) {\n return [];\n }\n const out: string[] = [];\n out.push(` ${ansi.bold('Message:')}`);\n for (const lineText of linesToShow) {\n out.push(` ${ansi.yellow(lineText)}`);\n }\n out.push('');\n return out;\n};\n\n// Thrown object pretty-printer (when we get raw error objects in failureDetails)\nexport const buildThrownSection = (details: readonly unknown[]): string[] => {\n const toLines = (value: unknown): string[] => {\n if (value == null) {\n return [];\n }\n if (typeof value === 'string') {\n return value.split(/\\r?\\n/);\n }\n try {\n return JSON.stringify(value, null, 2).split(/\\r?\\n/);\n } catch {\n return [String(value)];\n }\n };\n const candidates: string[] = [];\n for (const d of details) {\n const obj = d && typeof d === 'object' ? (d as Record<string, unknown>) : null;\n if (obj && obj.error && typeof obj.error === 'object') {\n const err = obj.error as Record<string, unknown>;\n if (typeof err.name === 'string') {\n candidates.push(`name: ${err.name}`);\n }\n if (typeof err.message === 'string') {\n candidates.push(`message: ${err.message}`);\n }\n if (typeof err.code === 'string' || typeof err.code === 'number') {\n candidates.push(`code: ${String(err.code)}`);\n }\n if (typeof err.cause === 'string') {\n candidates.push(`cause: ${err.cause}`);\n }\n if (err.cause && typeof err.cause === 'object') {\n candidates.push('cause:');\n candidates.push(...toLines(err.cause));\n }\n const rest = { ...err };\n delete (rest as any).name;\n delete (rest as any).message;\n delete (rest as any).code;\n delete (rest as any).stack;\n if (Object.keys(rest).length > 0) {\n candidates.push('details:');\n candidates.push(...toLines(rest));\n }\n }\n }\n if (!candidates.length) {\n return [];\n }\n const out: string[] = [];\n out.push(` ${ansi.bold('Thrown:')}`);\n for (const line of candidates.slice(0, 50)) {\n out.push(` ${ansi.yellow(line)}`);\n }\n out.push('');\n return out;\n};\n\nexport const mkPrettyFns = (): PrettyFns => ({\n drawRule,\n drawFailLine,\n renderRunLine,\n buildPerFileOverview,\n buildFileBadgeLine,\n extractBridgePath,\n buildCodeFrameSection,\n buildMessageSection,\n buildPrettyDiffSection,\n buildStackSection,\n deepestProjectLoc,\n findCodeFrameStart,\n linesFromDetails,\n buildFallbackMessageBlock,\n buildThrownSection,\n});\n", "import * as fs from 'node:fs';\n\nexport type Ctx = {\n readonly cwd: string;\n readonly width: number;\n readonly showStacks: boolean;\n readonly projectHint: RegExp;\n readonly editorCmd: string | undefined;\n readonly readSource: (absPath: string) => readonly string[];\n};\n\nexport const makeCtx = (\n opts?: { readonly cwd?: string; readonly editorCmd?: string },\n showStacks = false,\n): Ctx => {\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const readSource = (file: string): readonly string[] => {\n try {\n return fs.readFileSync(file.replace(/\\\\/g, '/'), 'utf8').split(/\\r?\\n/);\n } catch {\n return [];\n }\n };\n return { cwd, width, showStacks, projectHint, editorCmd: opts?.editorCmd, readSource };\n};\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\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 type { Ctx } from './context';\nimport { collapseStacks, stripAnsiSimple, isStackLine } from '../stacks';\nimport {\n drawRule,\n buildPerFileOverview,\n buildFileBadgeLine,\n drawFailLine,\n buildCodeFrameSection,\n buildPrettyDiffSection,\n buildMessageSection,\n linesFromDetails,\n deepestProjectLoc,\n buildConsoleSection,\n colorStackLine,\n buildThrownSection,\n} from './fns';\nimport { preferredEditorHref } from '../paths';\n\nconst colorTokens = {\n pass: Colors.Success,\n fail: Colors.Failure,\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};\n\n// ---- HTTP Crash Card helpers ----\n\nexport type HttpEvent = {\n readonly timestampMs: number;\n readonly kind?: 'response' | 'abort';\n readonly method?: string;\n readonly url?: string;\n readonly route?: string;\n readonly statusCode?: number;\n readonly durationMs?: number;\n readonly contentType?: string;\n readonly requestId?: string;\n readonly json?: unknown;\n readonly bodyPreview?: string;\n readonly testPath?: string;\n readonly currentTestName?: string;\n};\n\nexport type AssertionEvt = {\n readonly timestampMs?: number;\n readonly matcher?: string;\n readonly expectedNumber?: number;\n readonly receivedNumber?: number;\n readonly message?: string;\n readonly stack?: string;\n readonly testPath?: string;\n readonly currentTestName?: string;\n readonly expectedPreview?: string;\n readonly actualPreview?: string;\n};\n\nconst by =\n <T>(keySelector: (value: T) => number) =>\n (left: T, right: T) =>\n keySelector(left) - keySelector(right);\n\nconst isObject = (candidateValue: unknown): candidateValue is Record<string, unknown> =>\n !!candidateValue && typeof candidateValue === 'object';\n\nconst asHttpList = (candidateValue: unknown): readonly HttpEvent[] =>\n Array.isArray(candidateValue) ? (candidateValue as readonly HttpEvent[]) : [];\n\nconst summarizeUrl = (method?: string, url?: string, route?: string): string => {\n const base = route || url || '';\n const qs = url && url.includes('?') ? ` ? ${url.split('?')[1]}` : '';\n return [method || '', base, qs].filter(Boolean).join(' ').trim();\n};\n\nconst stripBridgeEventsFromConsole = (maybeConsole: unknown): unknown => {\n if (!Array.isArray(maybeConsole)) {\n return maybeConsole;\n }\n return (maybeConsole as ReadonlyArray<Record<string, unknown>>).filter((entry) => {\n try {\n const raw = Array.isArray(entry.message)\n ? (entry.message as readonly unknown[]).map(String).join(' ')\n : String((entry as Record<string, unknown>).message ?? '');\n return !raw.includes('[JEST-BRIDGE-EVENT]');\n } catch {\n return true;\n }\n });\n};\n\nexport const 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).replace(/\\\\/g, '/');\n};\n\n// ---- Transport classification and scoring helpers ----\n\nexport const isTransportError = (msg?: string): boolean => {\n const lowercaseMessage = (msg ?? '').toLowerCase();\n return /\\bsocket hang up\\b|\\beconnreset\\b|\\betimedout\\b|\\beconnrefused\\b|\\bwrite epipe\\b/.test(\n lowercaseMessage,\n );\n};\n\nconst envNumber = (name: string, fallback: number): number => {\n const parsed = Number(process.env[name]);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n};\n\n// normal window for correlation; stricter window when it's a transport error\nconst HEADLAMP_HTTP_WINDOW_MS = () => envNumber('HEADLAMP_HTTP_WINDOW_MS', 3000);\nconst HEADLAMP_HTTP_STRICT_WINDOW_MS = () => envNumber('HEADLAMP_HTTP_STRICT_WINDOW_MS', 600);\nconst HEADLAMP_HTTP_MIN_SCORE = () => envNumber('HEADLAMP_HTTP_MIN_SCORE', 1200);\nconst HEADLAMP_HTTP_DIFF_LIMIT = (): number => envNumber('HEADLAMP_HTTP_DIFF_LIMIT', 6);\nconst HEADLAMP_HTTP_SHOW_MISS = (): boolean => process.env.HEADLAMP_HTTP_MISS === '1';\n\n// Nearby events by time window (and optional same testPath)\nconst eventsNear = (\n http: readonly HttpEvent[],\n ts?: number,\n testPath?: string,\n windowMs = HEADLAMP_HTTP_WINDOW_MS(),\n): readonly HttpEvent[] => {\n if (typeof ts !== 'number' || !Number.isFinite(ts)) {\n return [];\n }\n return http.filter((e) => {\n const timeOk = typeof e.timestampMs === 'number' && Math.abs(e.timestampMs - ts) <= windowMs;\n const pathOk = !testPath || e.testPath === testPath;\n return timeOk && pathOk;\n });\n};\n\n// tiny parser: \"POST /api/v1/mobile/schedule/ShiftClockedIn ...\"\n// -> { method:'POST', path:'/api/...'}\nexport const parseMethodPathFromTitle = (title?: string): { method?: string; path?: string } => {\n if (!title) {\n return {};\n }\n const matchResult = title.match(/\\b(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\s+([^\\s)]+)/i);\n return matchResult ? { method: matchResult[1]?.toUpperCase(), path: matchResult[2] } : {};\n};\n\n// ---- HTTP-likeness heuristics ----\n\nconst isHttpStatusNumber = (statusNumber?: number): boolean =>\n typeof statusNumber === 'number' && statusNumber >= 100 && statusNumber <= 599;\n\nconst hasStatusSemantics = (assertionLike?: {\n readonly matcher?: string;\n readonly message?: string;\n readonly expectedNumber?: number;\n readonly receivedNumber?: number;\n}): boolean => {\n if (!assertionLike) {\n return false;\n }\n if (\n isHttpStatusNumber(assertionLike.expectedNumber) ||\n isHttpStatusNumber(assertionLike.receivedNumber)\n ) {\n return true;\n }\n const combinedRaw = `${assertionLike.matcher ?? ''} ${assertionLike.message ?? ''}`;\n const combinedMessage = combinedRaw.toLowerCase();\n return /\\bstatus(code)?\\b|\\btohaves(tatus|tatuscode)\\b/.test(combinedMessage);\n};\n\nconst fileSuggestsHttp = (relPath: string): boolean =>\n /(?:^|\\/)(routes?|api|controllers?|e2e|integration)(?:\\/|\\.test\\.)/i.test(relPath);\n\ntype HttpRelevanceCtx = {\n readonly assertion?: AssertionEvt;\n readonly title?: string;\n readonly relPath: string;\n readonly httpCountInSameTest: number;\n readonly hasTransportSignal: boolean;\n};\n\nconst inferHttpNumbersFromText = (\n lines: string[],\n): { readonly expectedNumber?: number; readonly receivedNumber?: number } => {\n const text = lines.join('\\n');\n const match = text.match(/Expected:\\s*(\\d{3})[\\s\\S]*?Received:\\s*(\\d{3})/i);\n if (match) {\n return { expectedNumber: Number(match[1]), receivedNumber: Number(match[2]) };\n }\n return {};\n};\n\nconst titleSuggestsHttp = (title?: string): boolean => {\n const { method, path: parsedPath } = parseMethodPathFromTitle(title);\n return Boolean(method || (parsedPath && parsedPath.startsWith('/')));\n};\n\nconst isHttpRelevant = (ctx: HttpRelevanceCtx): boolean => {\n const assertionCtx = ctx.assertion;\n return (\n ctx.hasTransportSignal ||\n ctx.httpCountInSameTest > 0 ||\n titleSuggestsHttp(ctx.title) ||\n hasStatusSemantics(assertionCtx) ||\n fileSuggestsHttp(ctx.relPath)\n );\n};\n\n// similarity: exact route match >> url contains path prefix >> none\nexport const routeSimilarityScore = (\n hint: { method?: string; path?: string },\n evt: { method?: string; route?: string; url?: string },\n): number => {\n if (!hint.path && !hint.method) {\n return 0;\n }\n const methodOk = hint.method && evt.method ? Number(hint.method === evt.method) : 0;\n const route = evt.route || evt.url || '';\n if (!route) {\n return methodOk * 10;\n }\n if (hint.path && route === hint.path) {\n return 500 + methodOk * 50;\n }\n if (hint.path && route.endsWith(hint.path)) {\n return 300 + methodOk * 50;\n }\n if (hint.path && route.includes(hint.path)) {\n return 200 + methodOk * 50;\n }\n return methodOk * 10;\n};\n\nexport const scoreHttpForAssertion =\n (assertion: AssertionEvt, titleHint: { method?: string; path?: string }) =>\n (candidateEvent: HttpEvent): number => {\n const tsA = assertion.timestampMs;\n const tsH = candidateEvent.timestampMs;\n const window = isTransportError(assertion.message)\n ? HEADLAMP_HTTP_STRICT_WINDOW_MS()\n : HEADLAMP_HTTP_WINDOW_MS();\n const timeScore =\n typeof tsA === 'number' && typeof tsH === 'number'\n ? Math.max(0, window - Math.abs(tsA - tsH))\n : 0;\n\n const statusScore =\n typeof assertion.receivedNumber === 'number' &&\n candidateEvent.statusCode === assertion.receivedNumber\n ? 1500\n : typeof assertion.expectedNumber === 'number' &&\n candidateEvent.statusCode === assertion.expectedNumber\n ? 1200\n : (candidateEvent.statusCode ?? 0) >= 400\n ? 800\n : 0;\n\n const routeScore = routeSimilarityScore(titleHint, candidateEvent);\n const specificity = candidateEvent.route ? 80 : candidateEvent.url ? 40 : 0;\n\n return timeScore + statusScore + routeScore + specificity;\n };\n\nexport const pickRelevantHttp = (\n assertion: AssertionEvt,\n http: readonly HttpEvent[],\n ctx: { readonly testPath?: string; readonly currentTestName?: string; readonly title?: string },\n): HttpEvent | undefined => {\n const hint = parseMethodPathFromTitle(ctx.title);\n const nameMatches = (leftName?: string, rightName?: string) =>\n !!leftName &&\n !!rightName &&\n (leftName === rightName || leftName.includes(rightName) || rightName.includes(leftName));\n const sameTest = (\n leftCtx?: { testPath?: string; currentTestName?: string },\n rightCtx?: { testPath?: string; currentTestName?: string },\n ) =>\n !!leftCtx &&\n !!rightCtx &&\n leftCtx.testPath === rightCtx.testPath &&\n nameMatches(leftCtx.currentTestName, rightCtx.currentTestName);\n\n const strictPool = http.filter(\n (httpEvent) => sameTest(assertion as any, httpEvent as any) || sameTest(ctx, httpEvent as any),\n );\n\n const windowMs = isTransportError(assertion.message)\n ? HEADLAMP_HTTP_STRICT_WINDOW_MS()\n : HEADLAMP_HTTP_WINDOW_MS();\n\n let pool = strictPool;\n if (!pool.length) {\n pool = http.filter(\n (e) =>\n e.testPath === ctx.testPath &&\n typeof assertion.timestampMs === 'number' &&\n typeof e.timestampMs === 'number' &&\n Math.abs(e.timestampMs - assertion.timestampMs) <= windowMs,\n );\n }\n if (!pool.length) {\n pool = http.filter(\n (e) =>\n typeof assertion.timestampMs === 'number' &&\n typeof e.timestampMs === 'number' &&\n Math.abs(e.timestampMs - assertion.timestampMs) <= windowMs,\n );\n }\n if (!pool.length) {\n return undefined;\n }\n\n const scored = pool\n .map((httpEvent) => ({ h: httpEvent, s: scoreHttpForAssertion(assertion, hint)(httpEvent) }))\n .sort((leftScore, rightScore) => rightScore.s - leftScore.s);\n\n const [best] = scored;\n const threshold = isTransportError(assertion.message)\n ? Math.max(HEADLAMP_HTTP_MIN_SCORE(), 1400)\n : HEADLAMP_HTTP_MIN_SCORE();\n return best && best.s >= threshold ? best.h : undefined;\n};\n\nexport type BridgeJSON = {\n readonly startTime: number;\n readonly testResults: ReadonlyArray<{\n readonly testFilePath: string;\n readonly status: 'passed' | 'failed';\n readonly failureMessage: string;\n readonly failureDetails?: readonly unknown[];\n readonly testExecError?: unknown | null;\n readonly console?: ReadonlyArray<{ message?: string; type?: string; origin?: string }> | null;\n readonly testResults: ReadonlyArray<{\n readonly title: string;\n readonly fullName: string;\n readonly status: string;\n readonly duration: number;\n readonly location: { readonly line: number; readonly column: number } | null;\n readonly failureMessages: string[];\n readonly failureDetails?: readonly unknown[];\n }>;\n }>;\n readonly aggregated: {\n readonly numTotalTestSuites: number;\n readonly numPassedTestSuites: number;\n readonly numFailedTestSuites: number;\n readonly numTotalTests: number;\n readonly numPassedTests: number;\n readonly numFailedTests: number;\n readonly numPendingTests: number;\n readonly numTodoTests: number;\n readonly startTime: number;\n readonly success: boolean;\n readonly runTimeMs?: number;\n };\n};\n\ntype JestAssertionResult = {\n readonly title: string;\n readonly ancestorTitles: string[];\n readonly status: string;\n readonly location?: { readonly line: number; readonly column: number } | null;\n readonly failureMessages?: string[];\n readonly failureDetails?: readonly unknown[];\n readonly fullName?: string;\n readonly duration?: number;\n};\n\ntype JestTestResult = {\n readonly testFilePath?: string;\n readonly name?: string;\n readonly status: 'passed' | 'failed';\n readonly failureMessage?: string;\n readonly assertionResults?: readonly JestAssertionResult[];\n readonly failureDetails?: readonly unknown[];\n readonly console?: ReadonlyArray<{ message?: unknown; type?: unknown; origin?: unknown }> | null;\n readonly perfStats?: Readonly<Record<string, unknown>>;\n};\n\ntype JestAggregatedResult = {\n readonly startTime: number;\n readonly success: boolean;\n readonly numTotalTestSuites: number;\n readonly numPassedTestSuites: number;\n readonly numFailedTestSuites: number;\n readonly numTotalTests: number;\n readonly numPassedTests: number;\n readonly numFailedTests: number;\n readonly numPendingTests: number;\n readonly numTodoTests: number;\n readonly testResults: readonly JestTestResult[];\n};\n\nconst isBridgeJSONLike = (candidateValue: unknown): candidateValue is BridgeJSON =>\n !!candidateValue &&\n typeof candidateValue === 'object' &&\n 'aggregated' in (candidateValue as Record<string, unknown>);\n\nexport const 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((tr) => ({\n testFilePath: tr.testFilePath || tr.name || '',\n status: tr.status,\n failureMessage: tr.failureMessage || '',\n failureDetails: tr.failureDetails ?? [],\n testExecError: (tr as any).testExecError ?? null,\n console: tr.console ?? null,\n testResults: (tr.assertionResults || []).map((assertion: JestAssertionResult) => ({\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 failureDetails: assertion.failureDetails || [],\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 = (agg: BridgeJSON['aggregated'], durationMs?: number): 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 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 const time =\n durationMs != null\n ? `${Math.max(0, Math.round(durationMs))}ms`\n : typeof agg.runTimeMs === 'number'\n ? `${Math.max(0, Math.round(agg.runTimeMs))}ms`\n : '';\n const thread = ansi.dim('(in thread 0ms, 0.00%)');\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 const renderVitestFromJestJSON = (\n data: BridgeJSON,\n ctx: Ctx,\n opts?: { readonly onlyFailures?: boolean },\n): string => {\n const out: string[] = [];\n const onlyFailures = Boolean(opts?.onlyFailures);\n // Top RUN line (hide when onlyFailures)\n if (!onlyFailures) {\n out.push(`${BackgroundColors.Run(ansi.white(' RUN '))} ${ansi.dim(ctx.cwd)}`, '');\n }\n for (const file of data.testResults) {\n const rel = file.testFilePath.replace(/\\\\/g, '/').replace(`${ctx.cwd}/`, '');\n const failed = file.testResults.filter((assertion) => assertion.status === 'failed');\n // Per-file overview list (hide when onlyFailures)\n if (!onlyFailures) {\n out.push(...buildPerFileOverview(rel, file.testResults));\n }\n // File header block with PASS/FAIL badge\n if (!(onlyFailures && failed.length === 0)) {\n out.push(buildFileBadgeLine(rel, failed.length));\n }\n // Parse bridge events once per file; use them later per assertion\n let httpSorted: ReadonlyArray<HttpEvent> = [];\n let assertionEvents: ReadonlyArray<AssertionEvt> = [];\n {\n const parseBridge = (\n consoleEntries: unknown,\n ): { http: readonly HttpEvent[]; assertions: readonly AssertionEvt[] } => {\n const http: HttpEvent[] = [];\n const assertions: AssertionEvt[] = [];\n if (!Array.isArray(consoleEntries)) {\n return { http, assertions };\n }\n for (const entry of consoleEntries) {\n const rec = entry as Record<string, unknown>;\n const rawMsgVal = rec && typeof rec.message !== 'undefined' ? rec.message : '';\n const raw = Array.isArray(rawMsgVal)\n ? (rawMsgVal as unknown[]).map(String).join(' ')\n : String(rawMsgVal ?? '');\n if (!raw.includes('[JEST-BRIDGE-EVENT]')) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const jsonText = raw.split('[JEST-BRIDGE-EVENT]').pop()?.trim() ?? '';\n try {\n const evt = JSON5.parse(jsonText) as Record<string, unknown>;\n const type = evt?.type as string | undefined;\n if (type === 'httpResponse') {\n const timestampMs = Number((evt as any).timestampMs ?? Date.now());\n http.push({\n kind: 'response',\n timestampMs,\n method: (evt as any).method,\n url: (evt as any).url,\n route: (evt as any).route,\n statusCode: (evt as any).statusCode,\n durationMs: (evt as any).durationMs,\n contentType: (evt as any).contentType,\n requestId: (evt as any).requestId,\n json: (evt as any).json,\n bodyPreview: (evt as any).bodyPreview,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n });\n } else if (type === 'httpAbort') {\n http.push({\n kind: 'abort',\n timestampMs: Number((evt as any).timestampMs ?? Date.now()),\n method: (evt as any).method,\n url: (evt as any).url,\n route: (evt as any).route,\n durationMs: (evt as any).durationMs,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n });\n } else if (type === 'httpResponseBatch') {\n const list = asHttpList((evt as any)?.events);\n for (const item of list) {\n const anyItem = item as any;\n http.push({\n timestampMs: Number(anyItem.timestampMs ?? Date.now()),\n method: anyItem.method,\n url: anyItem.url,\n route: anyItem.route,\n statusCode: anyItem.statusCode,\n durationMs: anyItem.durationMs,\n contentType: anyItem.contentType,\n requestId: anyItem.requestId,\n json: anyItem.json,\n bodyPreview: anyItem.bodyPreview,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n });\n }\n } else if (type === 'assertionFailure') {\n assertions.push({\n timestampMs:\n typeof (evt as any).timestampMs === 'number'\n ? ((evt as any).timestampMs as number)\n : undefined,\n matcher: (evt as any).matcher,\n expectedNumber:\n typeof (evt as any).expectedNumber === 'number'\n ? ((evt as any).expectedNumber as number)\n : undefined,\n receivedNumber:\n typeof (evt as any).receivedNumber === 'number'\n ? ((evt as any).receivedNumber as number)\n : undefined,\n message:\n typeof (evt as any).message === 'string'\n ? ((evt as any).message as string)\n : undefined,\n stack:\n typeof (evt as any).stack === 'string'\n ? ((evt as any).stack as string)\n : undefined,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n expectedPreview:\n typeof (evt as any).expectedPreview === 'string'\n ? ((evt as any).expectedPreview as string)\n : undefined,\n actualPreview:\n typeof (evt as any).actualPreview === 'string'\n ? ((evt as any).actualPreview as string)\n : undefined,\n });\n }\n } catch {\n /* ignore malformed */\n }\n }\n return { http, assertions };\n };\n\n const parsed = parseBridge(file.console);\n httpSorted = [...parsed.http].sort(by<HttpEvent>((event) => event.timestampMs));\n assertionEvents = parsed.assertions;\n }\n const inSameCtx = (testPath?: string, testName?: string) =>\n httpSorted.filter(\n (event) => event.testPath === testPath && event.currentTestName === testName,\n );\n // File-level failure when there are NO per-assertion failures\n if (file.failureMessage || file.testExecError) {\n const lines = file.failureMessage.split(/\\r?\\n/);\n const combinedDetails = (() => {\n const base = linesFromDetails(file.failureDetails);\n const exec = linesFromDetails(\n Array.isArray(file.testExecError)\n ? (file.testExecError as unknown[])\n : [file.testExecError],\n );\n return {\n stacks: [...base.stacks, ...exec.stacks],\n messages: [...base.messages, ...exec.messages],\n };\n })();\n const mergedForStack = collapseStacks([...lines, ...combinedDetails.stacks]);\n const synthLoc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n out.push(...buildCodeFrameSection(lines, ctx, synthLoc));\n const payloadPretty = buildPrettyDiffSection(file.failureDetails, lines);\n out.push(...payloadPretty);\n const hasPretty = payloadPretty.length > 0;\n const stackPreview = ctx.showStacks\n ? mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .filter((ln) => ctx.projectHint.test(stripAnsiSimple(ln)))\n .slice(0, 2)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`)\n : [];\n out.push(\n ...buildMessageSection(lines, combinedDetails, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n out.push(...buildConsoleSection(stripBridgeEventsFromConsole(file.console ?? null)));\n // full stack tail if not inlined\n if (ctx.showStacks && stackPreview.length === 0) {\n const tail = mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .slice(-4)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`);\n if (tail.length) {\n out.push(ansi.dim(' Stack:'), ...tail, '');\n }\n }\n }\n for (const assertion of failed) {\n out.push(drawFailLine());\n const header = `${rel} > ${assertion.fullName}`;\n const messagesArray: string[] = (() => {\n if (assertion.failureMessages && assertion.failureMessages.length > 0) {\n return assertion.failureMessages;\n }\n if (file.failureMessage && file.failureMessage.trim().length > 0) {\n return file.failureMessage.split(/\\r?\\n/);\n }\n // Fallbacks: use matcherResult.message from failureDetails if present\n const linesFromMatcher = linesFromDetails(\n assertion.failureDetails || file.failureDetails,\n ).messages;\n if (Array.isArray(linesFromMatcher) && linesFromMatcher.length > 0) {\n return linesFromMatcher;\n }\n return [''];\n })();\n const details = linesFromDetails(assertion.failureDetails || file.failureDetails);\n // Prefer explicit matcher message if present in failureDetails\n const matcherMsg = (() => {\n try {\n const arr = (assertion.failureDetails || file.failureDetails) as\n | readonly unknown[]\n | undefined;\n if (!arr) {\n return [] as string[];\n }\n for (const detailEntry of arr) {\n const obj =\n detailEntry && typeof detailEntry === 'object'\n ? (detailEntry as Record<string, unknown>)\n : null;\n const mr =\n obj && obj.matcherResult && typeof obj.matcherResult === 'object'\n ? (obj.matcherResult as Record<string, unknown>)\n : null;\n if (mr && typeof mr.message === 'string' && mr.message.trim()) {\n const name = typeof mr.matcherName === 'string' ? mr.matcherName : '';\n const matcherHeader = name ? ` ${ansi.bold('Matcher:')} ${ansi.yellow(name)}` : '';\n const bodyHeader = ` ${ansi.bold('Message:')}`;\n const body = String(mr.message)\n .split(/\\r?\\n/)\n .slice(0, 6)\n .map((ln) => ` ${ansi.yellow(ln)}`);\n return [matcherHeader, bodyHeader, ...body, ''].filter(Boolean) as string[];\n }\n }\n } catch {\n /* ignore */\n }\n return [] as string[];\n })();\n const mergedForStack = collapseStacks([...messagesArray, ...details.stacks]);\n const deepestLoc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n const locLink = deepestLoc\n ? (() => {\n const href = preferredEditorHref(deepestLoc.file, deepestLoc.line, ctx.editorCmd);\n const base = `${deepestLoc.file.split('/').pop()}:${deepestLoc.line}`;\n return osc8(base, href);\n })()\n : undefined;\n const bullet = (text: string) => `${Colors.Failure('\u00D7')} ${ansi.white(text)}`;\n const headerLine = `${ansi.white(header)}${locLink ? ` ${ansi.dim(`(${locLink})`)}` : ''}`;\n out.push(bullet(headerLine));\n const msgLines = messagesArray.join('\\n').split('\\n');\n const assertFallback =\n deepestLoc ||\n (assertion.location && { file: file.testFilePath, line: assertion.location.line });\n out.push('', ...buildCodeFrameSection(msgLines, ctx, assertFallback || undefined), '');\n const pretty = buildPrettyDiffSection(\n assertion.failureDetails || file.failureDetails,\n msgLines,\n );\n out.push(...pretty);\n const hasPretty = pretty.length > 0;\n const stackPreview = ctx.showStacks\n ? mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .filter((ln) => ctx.projectHint.test(stripAnsiSimple(ln)))\n .slice(0, 2)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`)\n : [];\n if (matcherMsg.length) {\n out.push(...matcherMsg);\n }\n out.push(\n ...buildMessageSection(msgLines, details, ctx, { suppressDiff: hasPretty, stackPreview }),\n );\n // ---- Compact HTTP Cause Card per failed assertion ----\n {\n type JsonPathChange = {\n readonly path: string;\n readonly kind: 'added' | 'removed' | 'changed';\n readonly preview?: string;\n };\n const HEADLAMP_HTTP_DIFF_LIMIT_LOCAL = (): number => HEADLAMP_HTTP_DIFF_LIMIT();\n const safeParseJSON = (text?: string): unknown | undefined => {\n try {\n return text ? JSON5.parse(text) : undefined;\n } catch {\n return undefined;\n }\n };\n const jsonDiff = (\n expected: unknown,\n actual: unknown,\n limit = HEADLAMP_HTTP_DIFF_LIMIT_LOCAL(),\n ): readonly JsonPathChange[] => {\n const outChanges: JsonPathChange[] = [];\n const queue: Array<{ pathSoFar: string; expectedValue: unknown; actualValue: unknown }> =\n [];\n queue.push({\n pathSoFar: '$',\n expectedValue: expected,\n actualValue: actual,\n });\n while (queue.length && outChanges.length < limit) {\n const { pathSoFar, expectedValue, actualValue } = queue.shift()!;\n const expectedIsObj = expectedValue && typeof expectedValue === 'object';\n const actualIsObj = actualValue && typeof actualValue === 'object';\n if (!expectedIsObj && !actualIsObj) {\n if (JSON.stringify(expectedValue) !== JSON.stringify(actualValue)) {\n outChanges.push({\n kind: 'changed',\n path: pathSoFar,\n preview: `${String(expectedValue)} \u2192 ${String(actualValue)}`,\n });\n }\n } else if (expectedIsObj && !actualIsObj) {\n outChanges.push({\n kind: 'changed',\n path: pathSoFar,\n preview: '[object] \u2192 primitive',\n });\n } else if (!expectedIsObj && actualIsObj) {\n outChanges.push({\n kind: 'changed',\n path: pathSoFar,\n preview: 'primitive \u2192 [object]',\n });\n } else {\n const expectedKeys = new Set(Object.keys(expectedValue as Record<string, unknown>));\n const actualKeys = new Set(Object.keys(actualValue as Record<string, unknown>));\n for (const key of expectedKeys) {\n if (!actualKeys.has(key) && outChanges.length < limit) {\n outChanges.push({ kind: 'removed', path: `${pathSoFar}.${key}` });\n }\n }\n for (const key of actualKeys) {\n if (!expectedKeys.has(key) && outChanges.length < limit) {\n outChanges.push({ kind: 'added', path: `${pathSoFar}.${key}` });\n }\n }\n for (const key of expectedKeys) {\n if (actualKeys.has(key) && outChanges.length < limit) {\n queue.push({\n pathSoFar: `${pathSoFar}.${key}`,\n expectedValue: (expectedValue as any)[key],\n actualValue: (actualValue as any)[key],\n });\n }\n }\n }\n }\n return outChanges;\n };\n const importantMessages = (json: unknown): readonly string[] => {\n const msgs: string[] = [];\n try {\n const obj = isObject(json) ? json : {};\n const pushMaybe = (candidate?: unknown) => {\n if (typeof candidate === 'string' && candidate.trim()) {\n msgs.push(candidate);\n }\n };\n (pushMaybe as any)((obj as any).displayMessage);\n (pushMaybe as any)((obj as any).message);\n if (Array.isArray((obj as any).errors)) {\n for (const element of (obj as any).errors as unknown[]) {\n pushMaybe(isObject(element) ? (element as any).message : undefined);\n }\n }\n if (Array.isArray((obj as any).data)) {\n for (const element of (obj as any).data as unknown[]) {\n pushMaybe(isObject(element) ? (element as any).message : undefined);\n }\n }\n } catch {\n /* ignore */\n }\n return msgs.slice(0, 2);\n };\n\n const nameMatches = (leftName?: string, rightName?: string) =>\n !!leftName &&\n !!rightName &&\n (leftName === rightName || leftName.includes(rightName) || rightName.includes(leftName));\n const corresponding =\n assertionEvents.find(\n (aevt) =>\n aevt.testPath === file.testFilePath &&\n nameMatches(aevt.currentTestName, assertion.title as string),\n ) ?? (assertion as unknown as AssertionEvt);\n\n const perTestSlice = inSameCtx(file.testFilePath, assertion.title as string);\n const nearByTime = eventsNear(\n httpSorted,\n (corresponding as any)?.timestampMs as number | undefined,\n file.testFilePath,\n );\n const hasAbort = perTestSlice.some((event) => event.kind === 'abort');\n const hasTransport = isTransportError((corresponding as any)?.message) || hasAbort;\n\n const httpLikely = isHttpRelevant({\n assertion: corresponding as AssertionEvt,\n title: assertion.fullName,\n relPath: rel,\n httpCountInSameTest: perTestSlice.length || nearByTime.length,\n hasTransportSignal: hasTransport,\n });\n\n if (!httpLikely) {\n /* no http section */\n } else {\n const expPreview = (corresponding as any)?.expectedPreview as string | undefined;\n const actPreview = (corresponding as any)?.actualPreview as string | undefined;\n const parsedExpected = safeParseJSON(expPreview);\n const parsedActual = safeParseJSON(actPreview);\n\n let corr = corresponding as AssertionEvt;\n if (\n !isHttpStatusNumber(corr.expectedNumber) &&\n !isHttpStatusNumber(corr.receivedNumber)\n ) {\n const inferred = inferHttpNumbersFromText(msgLines);\n if (\n isHttpStatusNumber(inferred.expectedNumber) ||\n isHttpStatusNumber(inferred.receivedNumber)\n ) {\n corr = { ...corr, ...inferred } as AssertionEvt;\n }\n }\n\n const relevant = pickRelevantHttp(\n {\n timestampMs: (corr as any)?.timestampMs,\n expectedNumber: (corr as any)?.expectedNumber,\n receivedNumber: (corr as any)?.receivedNumber,\n matcher: (corr as any)?.matcher,\n message: (corr as any)?.message,\n stack: (corr as any)?.stack,\n testPath: file.testFilePath,\n currentTestName: assertion.title,\n },\n httpSorted,\n {\n testPath: file.testFilePath,\n currentTestName: assertion.title as string,\n title: assertion.fullName,\n },\n );\n\n if (hasTransport) {\n const tsBase = ((corresponding as any)?.timestampMs ?? 0) as number;\n const abortCandidates = perTestSlice\n .filter((event) => event.kind === 'abort')\n .sort((leftEvent, rightEvent) => {\n const deltaLeft = Math.abs(tsBase - (leftEvent.timestampMs ?? 0));\n const deltaRight = Math.abs(tsBase - (rightEvent.timestampMs ?? 0));\n return deltaLeft - deltaRight;\n });\n const [nearestAbort] = abortCandidates;\n if (nearestAbort) {\n out.push(\n ' HTTP:',\n `\\n ${summarizeUrl(nearestAbort.method, nearestAbort.url, nearestAbort.route)} ${ansi.dim('->')} ${ansi.yellow('connection aborted')}`,\n (() => {\n const ms = nearestAbort.durationMs;\n return ms != null ? ` ${ansi.dim(`(${ms}ms)`)} ` : '';\n })(),\n '\\n',\n );\n } else if (relevant) {\n // fall through to normal rendering below\n } else if (HEADLAMP_HTTP_SHOW_MISS()) {\n out.push(\n ' HTTP:',\n `\\n ${ansi.dim('Transport error; no matching HTTP exchange in window.')}`,\n '\\n',\n );\n }\n }\n\n if (!hasTransport && relevant) {\n const parts: string[] = [];\n const where = summarizeUrl(relevant.method, relevant.url, relevant.route);\n const line1 = [\n ' HTTP:',\n `\\n ${where} ${ansi.dim('->')} ${relevant.statusCode ?? '?'}`,\n (() => {\n const ms = relevant.durationMs;\n return typeof ms === 'number' ? ` ${ansi.dim(`(${ms}ms)`)} ` : ' ';\n })(),\n relevant.contentType ? ansi.dim(`(${relevant.contentType})`) : '',\n relevant.requestId ? ansi.dim(` reqId=${relevant.requestId}`) : '',\n ].join('');\n const expVsAct = (() => {\n if (\n typeof (corresponding as any)?.expectedNumber === 'number' ||\n typeof (corresponding as any)?.receivedNumber === 'number'\n ) {\n const exp =\n (corresponding as any)?.expectedNumber != null\n ? String((corresponding as any).expectedNumber)\n : '?';\n const got =\n (corresponding as any)?.receivedNumber != null\n ? String((corresponding as any).receivedNumber)\n : String(relevant.statusCode ?? '?');\n return `\\n Expected: ${ansi.yellow(exp)} Received: ${ansi.yellow(got)}`;\n }\n return '';\n })();\n const whyLines = importantMessages(relevant.json)\n .map((msg) => `\\n Why: ${ansi.white(msg)}`)\n .slice(0, 1)\n .join('');\n const diffLines = (() => {\n const rightActual = parsedActual ?? relevant.json;\n if (!parsedExpected || !rightActual) {\n return '';\n }\n const changes = jsonDiff(parsedExpected, rightActual);\n if (!changes.length) {\n return '';\n }\n const head = '\\n Diff:';\n const body = changes\n .map((change) => {\n const marker =\n change.kind === 'added' ? '+' : change.kind === 'removed' ? '-' : '~';\n const previewText = change.preview ? `: ${ansi.dim(change.preview)}` : '';\n return `\\n ${marker} ${change.path}${previewText}`;\n })\n .join('');\n return head + body;\n })();\n parts.push(line1, expVsAct, whyLines, diffLines, '\\n');\n out.push(...parts.filter(Boolean));\n } else if (!hasTransport && !relevant && HEADLAMP_HTTP_SHOW_MISS()) {\n out.push(\n ' HTTP:',\n `\\n ${ansi.dim('No relevant HTTP exchange found. (HEADLAMP_HTTP_MISS=0 to hide)')}`,\n '\\n',\n );\n }\n }\n }\n // If still little context, print a compact thrown object section\n const minimalInfo = msgLines.every((ln) => !ln.trim());\n if (minimalInfo) {\n try {\n out.push(...buildThrownSection(assertion.failureDetails || []));\n } catch {\n /* ignore thrown section errors */\n }\n }\n // include any captured console error output for this file\n out.push(...buildConsoleSection(stripBridgeEventsFromConsole(file.console ?? null)));\n // full stack tail if not inlined\n if (ctx.showStacks && stackPreview.length === 0) {\n const tail = mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .slice(-4)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`);\n if (tail.length) {\n out.push(ansi.dim(' Stack:'), ...tail, '');\n }\n }\n out.push(drawFailLine(), '');\n }\n }\n // Dashed rule + right-aligned pill (always show final summary)\n const failedCount = data.aggregated.numFailedTests;\n out.push(drawRule(BackgroundColors.Failure(ansi.white(` Failed Tests ${failedCount} `))));\n out.push('');\n out.push(vitestFooter(data.aggregated));\n return out.join('\\n');\n};\n\nexport const tryBridgeFallback = (\n raw: string,\n ctx: Ctx,\n opts?: { readonly onlyFailures?: boolean },\n): string | null => {\n const bridgeJsonPath = extractBridgePath(raw, ctx.cwd);\n if (!bridgeJsonPath || !fs.existsSync(bridgeJsonPath)) {\n return null;\n }\n try {\n const json = JSON5.parse(fs.readFileSync(bridgeJsonPath, 'utf8'));\n const bridge = coerceJestJsonToBridge(json);\n return renderVitestFromJestJSON(bridge, ctx, opts);\n } catch {\n return null;\n }\n};\n", "import { stripAnsiSimple } from './stacks';\nimport { pipe } from './fp';\nimport { parseChunks } from './formatter/parse';\nimport { renderChunks } from './formatter/render';\nimport { makeCtx } from './formatter/context';\nimport { mkPrettyFns } from './formatter/fns';\nimport { tryBridgeFallback } from './formatter/bridge';\n\nexport type FormatOpts = {\n readonly cwd?: string;\n readonly editorCmd?: string;\n readonly onlyFailures?: boolean;\n};\n\nexport const formatJestOutputVitest = (raw: string, opts?: FormatOpts): string =>\n pipe(\n { raw, opts },\n (state) => ({\n ...state,\n ctx: makeCtx(state.opts, /\\bFAIL\\b/.test(stripAnsiSimple(state.raw))),\n }),\n (state) => ({ ...state, chunks: parseChunks(state.raw) }),\n (state) => ({\n ...state,\n rendered: renderChunks(state.chunks, state.ctx, mkPrettyFns(), {\n onlyFailures: Boolean(state.opts?.onlyFailures),\n }),\n }),\n (state) => {\n if (state.rendered.hadParsed) {\n return state.rendered.text;\n }\n const fallback = tryBridgeFallback(state.raw, state.ctx, {\n onlyFailures: Boolean(state.opts?.onlyFailures),\n });\n if (!fallback) {\n return state.rendered.text;\n }\n const prefix = state.rendered.text;\n return prefix ? `${prefix}\\n${fallback}` : fallback;\n },\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": ["resolve", "resolve", "path", "os", "uniq", "exports", "module", "exports", "module", "exports", "module", "util", "key", "token", "c", "buffer", "exports", "module", "util", "value", "exports", "module", "JSON5", "path", "os", "fsSync", "fs", "import_istanbul_lib_coverage", "path", "fs", "path", "path", "stat", "babelNodeBin", "jestBin", "fs", "path", "picomatch", "path", "fsSync", "path", "relPath", "ext", "stem", "hideMiddle", "label", "headRaw", "tailRaw", "extractImportSpecs", "step", "path", "fs", "JSON5", "normalize", "fs", "readSource", "fs", "path", "import_json5", "colorTokens", "extractBridgePath", "relPath", "JSON5", "rels", "prodSelections", "cachedRelated", "findRelatedTestsFast", "DEFAULT_TEST_GLOBS", "DEFAULT_EXCLUDE", "relPath"]
3
+ "sources": ["../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/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/relevance.ts", "../src/lib/jest-reporter-source.ts", "../src/lib/jest-environment-source.ts", "../src/lib/stacks.ts", "../src/lib/fp.ts", "../src/lib/formatter/parse.ts", "../src/lib/formatter/render.ts", "../src/lib/formatter/fns.ts", "../src/lib/formatter/context.ts", "../src/lib/formatter/bridge/tryBridgeFallback.ts", "../src/lib/formatter/bridge/logic.ts", "../src/lib/formatter/bridge/utils.ts", "../src/lib/formatJestOutputVitest.ts", "../src/cli.ts"],
4
+ "sourcesContent": ["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 ChangedMode = 'all' | 'staged' | 'unstaged' | 'branch';\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: 'onlyFailures'; 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 | { readonly type: 'changed'; readonly value: ChangedMode };\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 onlyFailures: (value: boolean): Action => ({ type: 'onlyFailures', 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 changed: (value: ChangedMode): Action => ({ type: 'changed', 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 // --onlyFailures flag (boolean)\n rule.eq('--onlyFailures', () => step([ActionBuilders.onlyFailures(true)])),\n rule.startsWith('--onlyFailures=', (value) =>\n step([\n ActionBuilders.onlyFailures(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase())),\n ]),\n ),\n rule.withLookahead('--onlyFailures', (_flag, lookahead) =>\n step([ActionBuilders.onlyFailures(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 // --changed flag: selects changed files via git (all|staged|unstaged)\n rule.eq('--changed', () => step([ActionBuilders.changed('all')])),\n rule.startsWith('--changed=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const mode: ChangedMode =\n raw === 'staged'\n ? 'staged'\n : raw === 'unstaged'\n ? 'unstaged'\n : raw === 'branch'\n ? 'branch'\n : 'all';\n return step([ActionBuilders.changed(mode)]);\n }),\n rule.withLookahead('--changed', (_flag, lookahead) => {\n const raw = String(lookahead).trim().toLowerCase();\n const mode: ChangedMode =\n raw === 'staged'\n ? 'staged'\n : raw === 'unstaged'\n ? 'unstaged'\n : raw === 'branch'\n ? 'branch'\n : 'all';\n return step([ActionBuilders.changed(mode)], true);\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 onlyFailures: 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 readonly changed?: ChangedMode;\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 onlyFailures?: 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 readonly changed?: ChangedMode;\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 'onlyFailures':\n return { vitest: [], jest: [], coverage: false, onlyFailures: 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 'changed':\n return { vitest: [], jest: [], coverage: false, changed: 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.changed !== undefined || left.changed !== undefined\n ? { changed: right.changed ?? left.changed }\n : {}),\n ...(right.coverageAbortOnFailure !== undefined || left.coverageAbortOnFailure !== undefined\n ? { coverageAbortOnFailure: right.coverageAbortOnFailure ?? left.coverageAbortOnFailure }\n : {}),\n ...(right.onlyFailures !== undefined || left.onlyFailures !== undefined\n ? { onlyFailures: right.onlyFailures ?? left.onlyFailures }\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 onlyFailures = 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 onlyFailures = contrib.onlyFailures ?? onlyFailures;\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 onlyFailures,\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 ...(contrib.changed !== undefined ? { changed: contrib.changed } : {}),\n };\n return out;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as fs from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\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 (opts: FindRelatedOpts): 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.map((productionPath) => path.resolve(productionPath)).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) => args.push('-g', `!${excludeGlobPattern}`));\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) || /(^|\\/)tests?\\//i.test(pathText);\n\n const absolute = lines\n .map((relativePath) => path.resolve(repoRoot, relativePath).replace(/\\\\/g, '/'))\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 cacheRoot = process.env.HEADLAMP_CACHE_DIR || path.join(os.tmpdir(), 'headlamp-cache');\n const repoKey = createHash('sha1').update(path.resolve(opts.repoRoot)).digest('hex').slice(0, 12);\n const cacheDir = path.join(cacheRoot, repoKey);\n const cacheFile = path.join(cacheDir, 'relevant-tests.json');\n\n let head = 'nogit';\n try {\n const raw = await runText('git', ['-C', opts.repoRoot, 'rev-parse', '--short', 'HEAD'], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\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<string, string[]>;\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 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<string, string[]>;\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 * as fs from 'node:fs/promises';\n\nimport * as LibReport from 'istanbul-lib-report';\nimport * as Reports from 'istanbul-reports';\nimport { createCoverageMap } from 'istanbul-lib-coverage';\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 { JEST_BRIDGE_REPORTER_SOURCE } from './jest-reporter-source';\nimport { JEST_BRIDGE_ENV_SOURCE } from './jest-environment-source';\nimport { formatJestOutputVitest } from './formatJestOutputVitest';\nimport {\n renderVitestFromJestJSON,\n coerceJestJsonToBridge,\n type BridgeJSON,\n} from './formatter/bridge';\nimport { makeCtx } from './formatter/context';\nimport { stripAnsiSimple } from './stacks';\nimport { tintPct } from './bars';\nimport { selectDirectTestsForProduction } from './graph-distance';\nimport { computeDirectnessRank, sortTestResultsWithRank } from './relevance';\n\nconst jestBin = './node_modules/.bin/jest';\nconst babelNodeBin = './node_modules/.bin/babel-node';\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 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 const jestParts: string[] = [];\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 // Merge all lcov.info files under coverage/jest/** (including root)\n const collectLcovs = (dir: string): string[] => {\n const out: string[] = [];\n try {\n const entries = fsSync.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n out.push(...collectLcovs(full));\n } else if (entry.isFile() && entry.name === 'lcov.info') {\n out.push(full);\n }\n }\n } catch {\n /* ignore */\n }\n return out;\n };\n try {\n const jestRoot = path.join('coverage', 'jest');\n const candidates = [path.join(jestRoot, 'lcov.info'), ...collectLcovs(jestRoot)]\n .map((candidatePath) => path.resolve(candidatePath))\n .filter((absolutePath, index, arr) => arr.indexOf(absolutePath) === index);\n for (const filePath of candidates) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const content = await readOrEmpty(filePath);\n if (content.trim()) {\n jestParts.push(content.trim());\n }\n } catch {\n /* ignore */\n }\n }\n } catch (readJestError) {\n if (isDebug()) {\n console.info(`scan jest lcov failed: ${String(readJestError)}`);\n }\n }\n if (!vitestContent && jestParts.length === 0) {\n if (isDebug()) {\n console.info('No coverage outputs found to merge.');\n }\n return;\n }\n const merged = [vitestContent.trim(), ...jestParts].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 // Merge any coverage-final.json under coverage/jest/**\n const map = createCoverageMap({});\n const listJsons = (dir: string): string[] => {\n const out: string[] = [];\n try {\n const entries = fsSync.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n out.push(...listJsons(full));\n } else if (entry.isFile() && entry.name === 'coverage-final.json') {\n out.push(full);\n }\n }\n } catch {\n /* ignore */\n }\n return out;\n };\n const coverageRoot = path.join('coverage', 'jest');\n const jsonCandidates = [\n path.join(coverageRoot, 'coverage-final.json'),\n ...listJsons(coverageRoot),\n ]\n .map((candidatePath) => path.resolve(candidatePath))\n .filter((absolutePath, index, arr) => {\n const isFirst = arr.indexOf(absolutePath) === index;\n const exists = fsSync.existsSync(absolutePath);\n return isFirst && exists;\n });\n for (const jsonPath of jsonCandidates) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const data = await readCoverageJson(jsonPath);\n if (Object.keys(data).length) {\n map.merge(data);\n }\n } catch (mergeJestError) {\n console.warn(`Failed merging jest coverage JSON @ ${jsonPath}: ${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 onlyFailures,\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 changed,\n } = deriveArgs(argv);\n // Derive changed-file selection (staged/unstaged/all) when requested\n const getChangedFiles = async (\n mode: 'all' | 'staged' | 'unstaged' | 'branch',\n cwd: string,\n ): Promise<readonly string[]> => {\n const collect = async (cmd: string, args: readonly string[]) => {\n try {\n const out = await runText(cmd, args, {\n cwd,\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 4000,\n });\n return out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n } catch {\n return [] as string[];\n }\n };\n if (mode === 'branch') {\n // Determine default branch (origin/HEAD -> ref or fall back to origin/main, origin/master)\n const resolveDefaultBranch = async (): Promise<string | undefined> => {\n const candidates: string[] = [];\n try {\n const sym = await collect('git', ['symbolic-ref', 'refs/remotes/origin/HEAD']);\n const headRef = sym.find((ln) => ln.includes('refs/remotes/origin/'));\n if (headRef) {\n const m = /refs\\/remotes\\/(.+)/.exec(headRef);\n if (m && m[1]) {\n candidates.push(m[1]);\n }\n }\n } catch {\n /* ignore */\n }\n candidates.push('origin/main', 'origin/master');\n for (const cand of candidates) {\n // eslint-disable-next-line no-await-in-loop\n const exists = await collect('git', ['rev-parse', '--verify', cand]);\n if (exists.length > 0) {\n return cand;\n }\n }\n return undefined;\n };\n const defaultBranch = await resolveDefaultBranch();\n const mergeBase = defaultBranch\n ? (await collect('git', ['merge-base', 'HEAD', defaultBranch]))[0]\n : undefined;\n const diffBase = mergeBase ?? 'HEAD^';\n const branchDiff = await collect('git', [\n 'diff',\n '--name-only',\n '--diff-filter=ACMRTUXB',\n diffBase,\n 'HEAD',\n ]);\n // On top of branch diff, include current uncommitted (staged/unstaged) and untracked changes\n const stagedNow = await collect('git', [\n 'diff',\n '--name-only',\n '--diff-filter=ACMRTUXB',\n '--cached',\n ]);\n const unstagedNow = await collect('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB']);\n const untrackedNow = await collect('git', ['ls-files', '--others', '--exclude-standard']);\n const rels = Array.from(\n new Set([...branchDiff, ...stagedNow, ...unstagedNow, ...untrackedNow]),\n );\n return rels\n .map((rel) => path.resolve(cwd, rel).replace(/\\\\/g, '/'))\n .filter((abs) => !abs.includes('/node_modules/') && !abs.includes('/coverage/'));\n }\n const staged =\n mode === 'staged' || mode === 'all'\n ? await collect('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB', '--cached'])\n : [];\n const unstagedTracked =\n mode === 'unstaged' || mode === 'all'\n ? await collect('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB'])\n : [];\n const untracked =\n mode === 'unstaged' || mode === 'all'\n ? await collect('git', ['ls-files', '--others', '--exclude-standard'])\n : [];\n const rels = Array.from(new Set([...staged, ...unstagedTracked, ...untracked]));\n return rels\n .map((rel) => path.resolve(cwd, rel).replace(/\\\\/g, '/'))\n .filter((abs) => !abs.includes('/node_modules/') && !abs.includes('/coverage/'));\n };\n const repoRootForChanged = workspaceRoot ?? (await findRepoRoot());\n const changedSelectionAbs = changed\n ? await getChangedFiles(changed, repoRootForChanged)\n : ([] as readonly string[]);\n const selectionPathsAugmented = changedSelectionAbs.length\n ? Array.from(new Set([...(selectionPaths as readonly string[]), ...changedSelectionAbs]))\n : selectionPaths;\n const selectionSpecifiedAugmented = Boolean(selectionSpecified || changedSelectionAbs.length > 0);\n console.info(\n `Selection \u2192 specified=${selectionSpecifiedAugmented} paths=${selectionPathsAugmented.length}`,\n );\n const { jest } = argsForDiscovery(['run'], jestArgs);\n const selectionLooksLikeTest = selectionPathsAugmented.some(\n (pathText) => /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) || /(^|\\/)tests?\\//i.test(pathText),\n );\n const selectionLooksLikePath = selectionPathsAugmented.some(\n (pathText) => /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText),\n );\n const selectionHasPaths = selectionPathsAugmented.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 = selectionPathsAugmented.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(selectionPathsAugmented, 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) => !selectionPathsAugmented.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 = selectionPathsAugmented.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((firstPath, secondPath) => firstPath.localeCompare(secondPath))\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 // If no candidates remain, expand search\n // universe to all discovered Jest tests across projects\n if (jestFiles.length === 0) {\n try {\n const allAcross: string[] = [];\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const listed = await discoverJestResilient([...jestDiscoveryArgs, '--config', cfg], {\n cwd: cfgCwd,\n });\n allAcross.push(...listed);\n }\n const uniqAll = Array.from(new Set(allAcross.map((p) => p.replace(/\\\\/g, '/'))));\n if (uniqAll.length > 0) {\n jestFiles = uniqAll;\n }\n } catch {\n // ignore\n }\n }\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: selectionSpecifiedAugmented,\n selectionPaths: selectionPathsAugmented,\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 allBridgeJson: Array<ReturnType<typeof coerceJestJsonToBridge>> = [];\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 sanitizedJestRunArgs = jestRunArgs.filter(\n (arg) => !/^--coverageDirectory(?:=|$)/.test(String(arg)),\n );\n const projectsToRun = projectConfigs.filter(\n (cfg) => (perProjectFiltered.get(cfg) ?? []).length > 0,\n );\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 // Compute directness order for the whole run (project-agnostic list)\n const prodSeedsForRun = ((): readonly string[] => {\n const changedAbs = (changedSelectionAbs ?? []).map((absPath) =>\n path.resolve(absPath).replace(/\\\\/g, '/'),\n );\n const selAbs = (selectionPathsAugmented as readonly string[]).map((pathToken) =>\n path.resolve(pathToken).replace(/\\\\/g, '/'),\n );\n return (changedAbs.length ? changedAbs : selAbs).filter(\n (abs) =>\n /[\\\\/]/.test(abs) &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs),\n );\n })();\n const repoRootForRank = repoRootForDiscovery;\n const fileRank = await computeDirectnessRank({\n repoRoot: repoRootForRank,\n productionSeeds: prodSeedsForRun,\n });\n\n for (let projIndex = 0; projIndex < projectsToRun.length; projIndex += 1) {\n const cfg = projectsToRun[projIndex]!;\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 const needsWrite = (() => {\n try {\n const existing = fsSync.readFileSync(reporterPath, 'utf8');\n return existing !== JEST_BRIDGE_REPORTER_SOURCE;\n } catch {\n return true;\n }\n })();\n if (needsWrite) {\n fsSync.mkdirSync(path.dirname(reporterPath), { recursive: true });\n fsSync.writeFileSync(reporterPath, JEST_BRIDGE_REPORTER_SOURCE, 'utf8');\n }\n // ensure environment file exists\n const envPath = path.resolve('scripts/jest-bridge-env.cjs');\n try {\n const existingEnv = fsSync.readFileSync(envPath, 'utf8');\n if (existingEnv !== JEST_BRIDGE_ENV_SOURCE) {\n fsSync.writeFileSync(envPath, JEST_BRIDGE_ENV_SOURCE, 'utf8');\n }\n } catch {\n try {\n fsSync.mkdirSync(path.dirname(envPath), { recursive: true });\n } catch {}\n fsSync.writeFileSync(envPath, JEST_BRIDGE_ENV_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 = selectionPathsAugmented\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 '--testLocationInResults',\n '--runTestsByPath',\n `--reporters=${reporterPath}`,\n '--colors',\n '--env',\n path.resolve('scripts/jest-bridge-env.cjs'),\n ...sanitizedJestRunArgs,\n ...(collectCoverage\n ? [\n '--coverageDirectory',\n path.join('coverage', 'jest', path.basename(cfg).replace(/[^a-zA-Z0-9_.-]+/g, '_')),\n ]\n : []),\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 allBridgeJson.push(bridge);\n // Reorder per-file results by directness and failure before rendering\n try {\n const reordered = {\n ...bridge,\n testResults: sortTestResultsWithRank(fileRank, bridge.testResults).reverse(),\n } as typeof bridge;\n pretty = renderVitestFromJestJSON(\n reordered,\n makeCtx(\n { cwd: repoRootForDiscovery, ...(editorCmd !== undefined ? { editorCmd } : {}) },\n /\\bFAIL\\b/.test(stripAnsiSimple(output)),\n ),\n { onlyFailures },\n );\n } catch {\n pretty = renderVitestFromJestJSON(\n bridge,\n makeCtx(\n { cwd: repoRootForDiscovery, ...(editorCmd !== undefined ? { editorCmd } : {}) },\n /\\bFAIL\\b/.test(stripAnsiSimple(output)),\n ),\n { onlyFailures },\n );\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 pretty = formatJestOutputVitest(output, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n onlyFailures,\n });\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 the bridge output still looks sparse (common `Error:` with no detail),\n // append raw text rendering as an extra hint source.\n try {\n const looksSparse =\n /\\n\\s*Error:\\s*\\n/.test(pretty) &&\n !/(Message:|Thrown:|Events:|Console errors:)/.test(pretty);\n if (looksSparse) {\n const rawAlso = formatJestOutputVitest(output, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n onlyFailures,\n });\n const merged = `${stripFooter(pretty)}\\n${stripFooter(rawAlso)}`.trimEnd();\n pretty = merged;\n }\n } catch {\n /* ignore raw merge failures */\n }\n // Always drop per-project footer; we'll print a unified summary later\n pretty = stripFooter(pretty);\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 // Print unified merged summary across all projects when available\n if (allBridgeJson.length > 0) {\n const agg = allBridgeJson.map((bridge) => bridge.aggregated);\n const sum = (select: (arg: (typeof agg)[number]) => number) =>\n agg.reduce((total, item) => total + (select(item) || 0), 0);\n const startTime = Math.min(\n ...allBridgeJson.map((bridge) => Number(bridge.startTime || Date.now())),\n );\n const unified = {\n startTime,\n testResults: allBridgeJson.flatMap((bridge) => bridge.testResults),\n aggregated: {\n numTotalTestSuites: sum((item) => item.numTotalTestSuites),\n numPassedTestSuites: sum((item) => item.numPassedTestSuites),\n numFailedTestSuites: sum((item) => item.numFailedTestSuites),\n numTotalTests: sum((item) => item.numTotalTests),\n numPassedTests: sum((item) => item.numPassedTests),\n numFailedTests: sum((item) => item.numFailedTests),\n numPendingTests: sum((item) => item.numPendingTests),\n numTodoTests: sum((item) => item.numTodoTests),\n startTime,\n success: agg.every((item) => Boolean(item.success)),\n runTimeMs: sum((item) => Number(item.runTimeMs ?? 0)),\n },\n } as const;\n // Order results by directness (import-graph distance)\n try {\n const prodSeeds = ((): readonly string[] => {\n const changedAbs = (changedSelectionAbs ?? []).map((absPath) =>\n path.resolve(absPath).replace(/\\\\/g, '/'),\n );\n const selAbs = (selectionPathsAugmented as readonly string[]).map((pathToken) =>\n path.resolve(pathToken).replace(/\\\\/g, '/'),\n );\n return (changedAbs.length ? changedAbs : selAbs).filter(\n (abs) =>\n /[\\\\/]/.test(abs) &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs),\n );\n })();\n const unifiedRank = await computeDirectnessRank({\n repoRoot: repoRootForDiscovery,\n productionSeeds: prodSeeds,\n });\n const ordered = sortTestResultsWithRank(unifiedRank, unified.testResults).reverse();\n // eslint-disable-next-line no-param-reassign\n (unified as any).testResults = ordered;\n } catch {\n // ignore relevance sorting on failure\n }\n const showStacks = Boolean((unified as any).aggregated?.numFailedTests > 0);\n let text = renderVitestFromJestJSON(\n unified as unknown as BridgeJSON,\n makeCtx(\n { cwd: repoRootForDiscovery, ...(editorCmd !== undefined ? { editorCmd } : {}) },\n showStacks,\n ),\n { onlyFailures },\n );\n if (onlyFailures) {\n text = text\n .split(/\\r?\\n/)\n .filter((line) => !/^\\s*PASS\\b/.test(stripAnsiSimple(line)))\n .join('\\n');\n }\n if (text.trim().length > 0) {\n process.stdout.write(text.endsWith('\\n') ? text : `${text}\\n`);\n }\n }\n\n const finalExitCode = jestExitCode;\n if (collectCoverage && shouldRunJest && coverageAbortOnFailure && finalExitCode !== 0) {\n process.exit(finalExitCode);\n return;\n }\n // Only compute and print coverage if we are not aborting after failures\n if (collectCoverage && shouldRunJest) {\n await mergeLcov();\n const repoRoot = workspaceRoot ?? (await findRepoRoot());\n const mergedOptsBase = {\n selectionSpecified: selectionSpecifiedAugmented,\n selectionPaths: selectionPathsAugmented,\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 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';\n\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 { computeDirectnessRank, sortPathsWithRank } from './relevance';\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(sum.functions.pct)(\n funcsPctText,\n )} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const max = opts.limitPerFile === 'all' ? Number.POSITIVE_INFINITY : (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.slice().sort(compareRangesByLengthDescThenStart).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(`L${block.end}`)} ${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(` - branch#${br.id} @ ${link} missed paths: [${br.zeroPaths.join(', ')}]`);\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 ? process.stdout.rows : 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 ? Math.max(2, Math.floor(availableRows * 0.25)) : 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).slice().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(sum.functions.pct)(\n funcsPctText,\n )} 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(` - L${hotspot.start}\u2013L${hotspot.end} (${len} lines) ${link}`);\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(` \u2026 truncated: +${restHs} hotspots, +${restFns} funcs, +${restBrs} branches`),\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 = 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(headParts, tailParts, hideMiddle || hidAny, baseLabel);\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(headRaw, tailRaw, hideMiddle, baseFull, maxWidth);\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(headRaw, tailRaw, hideMiddle, baseFull, maxWidth);\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(headRaw, tailRaw, hideMiddle, baseFull, maxWidth);\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(currentFile, spec, rootDir, resolutionCache);\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 ? process.stdout.rows : 40;\n const tableBudget = Math.max(14, Math.min(opts.maxRows ?? rowsAvail - 1, rowsAvail + 8));\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(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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' ? opts.maxHotspots : Math.ceil(rowBudget * 0.45),\n blocks.length,\n );\n if (wantHs > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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(width);\n return linkifyPadded(opts.absPath, hotspotRange.start, opts.editorCmd)(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(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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(width);\n return linkifyPadded(opts.absPath, missedFunction.line, opts.editorCmd)(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(shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)),\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(width);\n return linkifyPadded(opts.absPath, missedBranch.line, opts.editorCmd)(display);\n }),\n cell('Branch'),\n cell(`L${missedBranch.line}`),\n cell(''),\n cell(''),\n cell(''),\n cell(''),\n cell(`#${missedBranch.id} missed [${missedBranch.zeroPaths.join(', ')}]`),\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(width);\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([cell(''), cell(''), cell(''), cell(''), cell(''), cell(''), cell(''), cell('')]);\n }\n }\n }\n const table = renderTable(cols, rows);\n console.info(table);\n const sep = ansi.gray(\n '\u2500'.repeat(\n Math.max(20, typeof process.stdout.columns === 'number' ? process.stdout.columns : 100),\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 dirA === dirB || dirB.startsWith(`${dirA}/`) || dirA.startsWith(`${dirB}/`);\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 !(sum.lines.pct >= 100 && sum.functions.pct >= 100 && sum.branches.pct >= 100);\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) => jaccard(selfTokens, selectionTokenSet)),\n );\n const chgSim = Math.max(\n 0,\n ...changedTokens.map((changedTokenSet) => jaccard(selfTokens, changedTokenSet)),\n );\n const tstSim = Math.max(0, ...testTokens.map((tset) => jaccard(selfTokens, tset)));\n const nearSelection = selectionAbs.some((selectionPath) =>\n isSameDirOrChild(absNorm, selectionPath),\n );\n const nearChanged = changedAbs.some((changedPath) => isSameDirOrChild(absNorm, changedPath));\n const related = selSim > 0 || chgSim > 0 || nearSelection || nearChanged;\n\n // Use precomputed distance\n const distance = selectionSetAbs.has(absNorm) ? 0 : (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) + Math.round(chgSim * 5) + Math.round(tstSim * 12) + prefixPenalty;\n return { abs: absNorm, rel, linesPct: pct, group, score, distance };\n }),\n );\n // Primary ordering by directness rank using shared relevance helpers\n const prodSeeds = selectionAbs.length > 0 ? selectionAbs : changedAbs;\n const rank = await computeDirectnessRank({ repoRoot: opts.root, productionSeeds: prodSeeds });\n let files = sortPathsWithRank(\n rank,\n scored.map((s) => s.abs),\n );\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 ? process.stdout.rows : 40;\n const perFileRows = opts.pageFit ? Math.max(14, rowsAvail - 1) : 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' ? { maxHotspots: opts.maxHotspots } : {}),\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", "import * as path from 'node:path';\n\nimport { DEFAULT_EXCLUDE } from './args';\nimport { cachedRelated, findRelatedTestsFast, DEFAULT_TEST_GLOBS } from './fast-related';\n\nexport type TestFileResultLike = Readonly<{\n testFilePath: string;\n status?: string;\n testResults?: ReadonlyArray<{ readonly status?: string }>;\n}>;\n\nconst normalizeAbs = (inputPath: string): string => path.resolve(inputPath).replace(/\\\\/g, '/');\n\nconst compareBooleanDesc = (left: boolean, right: boolean): number => {\n if (left === right) {\n return 0;\n }\n return right ? 1 : -1; // true first\n};\n\nconst compareNumberAsc = (left: number, right: number): number => left - right;\n\nconst compareStringAsc = (left: string, right: string): number => left.localeCompare(right);\n\nconst fileFailed = (file: TestFileResultLike): boolean =>\n Boolean(\n (file.status ?? '') === 'failed' ||\n (file.testResults ?? []).some((assertion) => (assertion.status ?? '') === 'failed'),\n );\n\nexport const composeComparators =\n <T>(...comparators: ReadonlyArray<(l: T, r: T) => number>): ((l: T, r: T) => number) =>\n (left: T, right: T) => {\n for (const cmp of comparators) {\n const result = cmp(left, right);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n\nexport const comparatorForRank = (\n rankByPath: ReadonlyMap<string, number>,\n): ((left: TestFileResultLike, right: TestFileResultLike) => number) => {\n const rankOrInf = (absPath: string) =>\n rankByPath.has(absPath) ? (rankByPath.get(absPath) as number) : Number.POSITIVE_INFINITY;\n return composeComparators<TestFileResultLike>(\n (left, right) => compareBooleanDesc(fileFailed(left), fileFailed(right)),\n (left, right) =>\n compareNumberAsc(\n rankOrInf(normalizeAbs(left.testFilePath)),\n rankOrInf(normalizeAbs(right.testFilePath)),\n ),\n (left, right) =>\n compareStringAsc(normalizeAbs(left.testFilePath), normalizeAbs(right.testFilePath)),\n );\n};\n\nexport type DirectnessRankOptions = Readonly<{\n repoRoot: string;\n productionSeeds: ReadonlyArray<string>;\n excludeGlobs?: ReadonlyArray<string>;\n}>;\n\nexport const computeDirectnessRank = async (\n opts: DirectnessRankOptions,\n): Promise<Map<string, number>> => {\n const selectionKey = opts.productionSeeds\n .map((abs) => path.relative(opts.repoRoot, abs).replace(/\\\\/g, '/'))\n .sort((left, right) => left.localeCompare(right))\n .join('|');\n const related = await cachedRelated({\n repoRoot: opts.repoRoot,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot: opts.repoRoot,\n productionPaths: opts.productionSeeds,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: opts.excludeGlobs ?? DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n const out = new Map<string, number>();\n related.forEach((abs, index) => {\n out.set(normalizeAbs(abs), index);\n });\n return out;\n};\n\nexport const sortTestResultsWithRank = <T extends TestFileResultLike>(\n rankByPath: ReadonlyMap<string, number>,\n results: ReadonlyArray<T>,\n): T[] => results.slice().sort(comparatorForRank(rankByPath) as (l: T, r: T) => number);\n\n// Path-only comparator/sorter (for coverage files, etc.)\nexport const comparatorForPathRank = (\n rankByPath: ReadonlyMap<string, number>,\n): ((leftPath: string, rightPath: string) => number) => {\n const rankOrInf = (absPath: string) =>\n rankByPath.has(absPath) ? (rankByPath.get(absPath) as number) : Number.POSITIVE_INFINITY;\n return composeComparators<string>(\n (left, right) =>\n compareNumberAsc(rankOrInf(normalizeAbs(left)), rankOrInf(normalizeAbs(right))),\n (left, right) => compareStringAsc(normalizeAbs(left), normalizeAbs(right)),\n );\n};\n\nexport const sortPathsWithRank = (\n rankByPath: ReadonlyMap<string, number>,\n paths: ReadonlyArray<string>,\n): string[] => paths.slice().sort(comparatorForPathRank(rankByPath));\n", "export const JEST_BRIDGE_REPORTER_SOURCE = `const fs = require('fs');\nconst path = require('path');\n\nconst isObject = (v) => typeof v === 'object' && v !== null;\nconst sanitizeError = (err) => {\n if (!isObject(err)) return err;\n const out = {};\n const name = err.name || (err.constructor && err.constructor.name) || undefined;\n if (name) out.name = String(name);\n if (typeof err.message === 'string') out.message = err.message;\n if (typeof err.stack === 'string') out.stack = err.stack;\n if (err.code !== undefined) out.code = err.code;\n if (err.expected !== undefined) out.expected = err.expected;\n if (err.received !== undefined) out.received = err.received;\n if (err.matcherResult && isObject(err.matcherResult)) {\n const mr = err.matcherResult;\n let messageText;\n try {\n messageText = typeof mr.message === 'function' ? String(mr.message()) : (typeof mr.message === 'string' ? mr.message : undefined);\n } catch {}\n out.matcherResult = {\n matcherName: typeof mr.matcherName === 'string' ? mr.matcherName : undefined,\n message: messageText,\n stack: typeof mr.stack === 'string' ? mr.stack : undefined,\n expected: mr.expected,\n received: mr.received,\n actual: mr.actual,\n pass: typeof mr.pass === 'boolean' ? mr.pass : undefined,\n };\n }\n if (err.cause) {\n out.cause = sanitizeError(err.cause);\n }\n // Copy own enumerable props to preserve custom data\n try {\n for (const key of Object.keys(err)) {\n if (!(key in out)) out[key] = err[key];\n }\n } catch {}\n return out;\n};\nconst sanitizeDetail = (d) => {\n if (typeof d === 'string') return d;\n if (!isObject(d)) return d;\n // Common Jest detail shapes\n const out = {};\n if (d.message) out.message = d.message;\n if (d.stack) out.stack = d.stack;\n if (d.error) out.error = sanitizeError(d.error);\n if (d.matcherResult) out.matcherResult = sanitizeError({ matcherResult: d.matcherResult }).matcherResult;\n if (d.expected !== undefined) out.expected = d.expected;\n if (d.received !== undefined) out.received = d.received;\n // Copy the rest\n try {\n for (const key of Object.keys(d)) {\n if (!(key in out)) out[key] = d[key];\n }\n } catch {}\n return out;\n};\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 failureDetails: (a.failureDetails || []).map(sanitizeDetail),\n });\n this.buf.testResults.push({\n testFilePath: tr.testFilePath,\n status: tr.numFailingTests ? 'failed' : 'passed',\n failureMessage: tr.failureMessage || '',\n failureDetails: (tr.failureDetails || []).map(sanitizeDetail),\n testExecError: tr.testExecError ? sanitizeError(tr.testExecError) : null,\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", "export const JEST_BRIDGE_ENV_SOURCE = `\n'use strict';\n\nconst NodeEnvironment = require('jest-environment-node').TestEnvironment || require('jest-environment-node');\n\nmodule.exports = class BridgeEnv extends NodeEnvironment {\n constructor(config, context) {\n super(config, context);\n const { AsyncLocalStorage } = require('node:async_hooks');\n this._als = new AsyncLocalStorage();\n this._cleanup = [];\n }\n\n _ctx() {\n try { const s = this._als.getStore(); if (s) return s; } catch {}\n try {\n const st = this.global.expect && typeof this.global.expect.getState === 'function' ? this.global.expect.getState() : {};\n return { testPath: st.testPath, currentTestName: st.currentTestName };\n } catch { return {}; }\n }\n\n async setup() {\n await super.setup();\n\n try { Error.stackTraceLimit = Math.max(Error.stackTraceLimit || 10, 50); } catch {}\n\n const print = (payload) => { try { this.global.console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {} };\n const toErr = (x) => { try { return x instanceof Error ? x : new Error(String(x)); } catch { return new Error('unknown'); } };\n\n const onRej = (reason) => {\n const e = toErr(reason);\n const c = this._ctx();\n print({ type: 'unhandledRejection', name: e.name, message: e.message, stack: e.stack, code: e.code ?? undefined, ...c });\n };\n const onExc = (error) => {\n const e = toErr(error);\n const c = this._ctx();\n print({ type: 'uncaughtException', name: e.name, message: e.message, stack: e.stack, code: e.code ?? undefined, ...c });\n };\n\n this.global.process.on('unhandledRejection', onRej);\n this.global.process.on('uncaughtException', onExc);\n this._cleanup.push(() => {\n this.global.process.off('unhandledRejection', onRej);\n this.global.process.off('uncaughtException', onExc);\n });\n\n // Signal environment readiness so we can confirm the custom env loaded\n try { const c = this._ctx(); print({ type: 'envReady', ...c }); } catch {}\n\n try {\n const http = this.global.require ? this.global.require('http') : require('http');\n const originalEmit = http && http.Server && http.Server.prototype && http.Server.prototype.emit;\n if (originalEmit) {\n const MAX = 64 * 1024;\n const asString = (x) => { try { if (typeof x === 'string') return x; if (Buffer.isBuffer(x)) return x.toString('utf8'); return String(x); } catch { return ''; } };\n\n const patched = function(eventName, req, res) {\n try {\n if (eventName === 'request' && req && res && typeof res.write === 'function' && typeof res.end === 'function') {\n const startAt = Date.now();\n const safeHeader = (k) => { try { return req && req.headers ? String((req.headers[k.toLowerCase()] ?? '')) : ''; } catch { return ''; } };\n const reqIdHeader = safeHeader('x-request-id');\n const chunks = [];\n const write = res.write.bind(res);\n const end = res.end.bind(res);\n const method = req.method ? String(req.method) : undefined;\n const url = (req.originalUrl || req.url) ? String(req.originalUrl || req.url) : undefined;\n\n res.write = function(chunk, enc, cb) {\n try { const s = asString(chunk); if (s) chunks.push(s); } catch {}\n return write(chunk, enc, cb);\n };\n res.end = function(chunk, enc, cb) {\n try { const s = asString(chunk); if (s) chunks.push(s); } catch {}\n try {\n const preview = chunks.join('').slice(0, MAX);\n const statusCode = typeof res.statusCode === 'number' ? res.statusCode : undefined;\n const ct = (typeof res.getHeader === 'function' && res.getHeader('content-type')) || undefined;\n const routePath = (req && req.route && req.route.path) || (req && req.baseUrl && req.path ? (req.baseUrl + req.path) : undefined);\n const jsonParsed = (() => { try { return JSON.parse(preview); } catch { return undefined; } })();\n const requestId = reqIdHeader || (jsonParsed && typeof jsonParsed === 'object' ? (jsonParsed.requestId || jsonParsed.reqId || '') : '');\n const ctx = (global.__JEST_BRIDGE_ENV_REF && global.__JEST_BRIDGE_ENV_REF._ctx) ? global.__JEST_BRIDGE_ENV_REF._ctx() : {};\n const payload = {\n type: 'httpResponse',\n timestampMs: Date.now(),\n durationMs: Math.max(0, Date.now() - startAt),\n method, url, statusCode,\n route: routePath ? String(routePath) : undefined,\n contentType: ct ? String(ct) : undefined,\n headers: (typeof res.getHeaders === 'function') ? res.getHeaders() : undefined,\n requestId: requestId ? String(requestId) : undefined,\n bodyPreview: preview,\n json: jsonParsed,\n testPath: ctx.testPath, currentTestName: ctx.currentTestName,\n };\n try {\n if (!global.__JEST_HTTP_EVENTS__) global.__JEST_HTTP_EVENTS__ = [];\n const arr = global.__JEST_HTTP_EVENTS__;\n arr.push({ timestampMs: payload.timestampMs, durationMs: payload.durationMs, method: payload.method, url: payload.url, route: payload.route, statusCode: payload.statusCode, contentType: payload.contentType, requestId: payload.requestId, json: payload.json, bodyPreview: payload.bodyPreview });\n if (arr.length > 25) arr.splice(0, arr.length - 25);\n } catch {}\n try { console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {}\n } catch {}\n return end(chunk, enc, cb);\n };\n try {\n res.on('close', function onClose() {\n try {\n const ended = typeof res.writableEnded === 'boolean' ? res.writableEnded : false;\n if (!ended) {\n const routePath = (req && req.route && req.route.path) || (req && req.baseUrl && req.path ? (req.baseUrl + req.path) : undefined);\n const ctx = (global.__JEST_BRIDGE_ENV_REF && global.__JEST_BRIDGE_ENV_REF._ctx) ? global.__JEST_BRIDGE_ENV_REF._ctx() : {};\n const payload = {\n type: 'httpAbort',\n timestampMs: Date.now(),\n durationMs: Math.max(0, Date.now() - startAt),\n method, url,\n route: routePath ? String(routePath) : undefined,\n testPath: ctx.testPath, currentTestName: ctx.currentTestName,\n };\n try { console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {}\n }\n } catch {}\n });\n } catch {}\n }\n } catch {}\n return originalEmit.apply(this, arguments);\n };\n\n try { this.global.__JEST_BRIDGE_ENV_REF = this; } catch {}\n http.Server.prototype.emit = patched;\n\n this._cleanup.push(() => {\n try { if (http.Server && http.Server.prototype) http.Server.prototype.emit = originalEmit; } catch {}\n try { delete this.global.__JEST_BRIDGE_ENV_REF; } catch {}\n });\n }\n } catch {}\n\n // Wrap test functions to emit rich assertion events on failures\n try {\n const g = this.global;\n const ctxFn = () => {\n try {\n const ref = g.__JEST_BRIDGE_ENV_REF;\n return ref && typeof ref._ctx === 'function' ? ref._ctx() : {};\n } catch { return {}; }\n };\n const emitAssertion = (err) => {\n try {\n const e = toErr(err);\n const mr = e && typeof e === 'object' && e.matcherResult ? e.matcherResult : undefined;\n const messageText = (() => { try { return mr && typeof mr.message === 'function' ? String(mr.message()) : (e.message || ''); } catch { return e.message || ''; } })();\n const expectedPreview = (() => { try { return mr && mr.expected !== undefined ? JSON.stringify(mr.expected, null, 2) : undefined; } catch { return undefined; } })();\n const actualPreview = (() => { try { return mr && mr.received !== undefined ? JSON.stringify(mr.received, null, 2) : undefined; } catch { return undefined; } })();\n const c = ctxFn();\n const expectedRaw = (() => { try { return mr?.expected; } catch { return undefined; } })();\n const receivedRaw = (() => { try { return mr?.received; } catch { return undefined; } })();\n print({\n type: 'assertionFailure',\n timestampMs: Date.now(),\n matcher: mr && typeof mr.matcherName === 'string' ? mr.matcherName : undefined,\n expectedPreview,\n actualPreview,\n expectedNumber: typeof expectedRaw === 'number' ? expectedRaw : undefined,\n receivedNumber: typeof receivedRaw === 'number' ? receivedRaw : undefined,\n message: messageText,\n stack: e.stack,\n ...c,\n });\n } catch {}\n };\n const wrap = (orig) => {\n if (!orig || typeof orig !== 'function') return orig;\n const wrapped = function(name, fn, timeout) {\n if (typeof fn !== 'function') return orig.call(this, name, fn, timeout);\n const run = function() {\n try {\n const res = fn.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n return res.catch((err) => { emitAssertion(err); throw err; });\n }\n return res;\n } catch (err) {\n emitAssertion(err);\n throw err;\n }\n };\n return orig.call(this, name, run, timeout);\n };\n try { wrapped.only = orig.only && typeof orig.only === 'function' ? wrap(orig.only) : orig.only; } catch {}\n try { wrapped.skip = orig.skip && typeof orig.skip === 'function' ? wrap(orig.skip) : orig.skip; } catch {}\n return wrapped;\n };\n try { g.it = wrap(g.it); } catch {}\n try { g.test = wrap(g.test); } catch {}\n } catch {}\n }\n\n async handleTestEvent(evt, state) {\n if (evt.name === 'test_start') {\n const store = { testPath: state.testPath, currentTestName: evt.test.name };\n try { this._als.enterWith(store); } catch {}\n } else if (evt.name === 'test_done') {\n try { this._als.enterWith({}); } catch {}\n try {\n const events = Array.isArray(global.__JEST_HTTP_EVENTS__) ? global.__JEST_HTTP_EVENTS__ : [];\n if (events.length) {\n const batch = events.slice(-10);\n const payload = { type: 'httpResponseBatch', events: batch, testPath: state.testPath, currentTestName: evt.test.name };\n try { this.global.console.error('[JEST-BRIDGE-EVENT]', JSON.stringify(payload)); } catch {}\n try { global.__JEST_HTTP_EVENTS__ = []; } catch {}\n }\n } catch {}\n }\n }\n\n async teardown() {\n for (let i = this._cleanup.length - 1; i >= 0; i--) {\n try { this._cleanup[i](); } catch {}\n }\n await super.teardown();\n }\n};\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", "// Minimal Haskell-style toolkit (no effects, all named exports)\nexport type Fn<A, B> = (a: A) => B;\n\n// Heteromorphic pipe: allows A -> B -> C ... with overloads\nexport function pipe<A>(a: A): A;\nexport function pipe<A, B>(a: A, ab: Fn<A, B>): B;\nexport function pipe<A, B, C>(a: A, ab: Fn<A, B>, bc: Fn<B, C>): C;\nexport function pipe<A, B, C, D>(a: A, ab: Fn<A, B>, bc: Fn<B, C>, cd: Fn<C, D>): D;\nexport function pipe<A, B, C, D, E>(\n a: A,\n ab: Fn<A, B>,\n bc: Fn<B, C>,\n cd: Fn<C, D>,\n de: Fn<D, E>,\n): E;\nexport function pipe<A, B, C, D, E, F>(\n a: A,\n ab: Fn<A, B>,\n bc: Fn<B, C>,\n cd: Fn<C, D>,\n de: Fn<D, E>,\n ef: Fn<E, F>,\n): F;\nexport function pipe(initial: unknown, ...fns: ReadonlyArray<Fn<unknown, unknown>>): unknown {\n return fns.reduce((acc, fn) => fn(acc), initial);\n}\n\nexport function flow<A, B>(ab: Fn<A, B>): Fn<A, B>;\nexport function flow<A, B, C>(ab: Fn<A, B>, bc: Fn<B, C>): Fn<A, C>;\nexport function flow<A, B, C, D>(ab: Fn<A, B>, bc: Fn<B, C>, cd: Fn<C, D>): Fn<A, D>;\nexport function flow<A, B, C, D, E>(\n ab: Fn<A, B>,\n bc: Fn<B, C>,\n cd: Fn<C, D>,\n de: Fn<D, E>,\n): Fn<A, E>;\nexport function flow(...fns: ReadonlyArray<Fn<unknown, unknown>>) {\n return (input: unknown) => fns.reduce((acc, fn) => fn(acc), input);\n}\n\nexport type Option<A> = { readonly tag: 'Some'; readonly value: A } | { readonly tag: 'None' };\nexport const some = <A>(value: A): Option<A> => ({ tag: 'Some', value });\nexport const none: Option<never> = { tag: 'None' };\nexport const fromNullable = <A>(value: A | null | undefined): Option<A> =>\n value == null ? none : some(value);\nexport const mapOption =\n <A, B>(mapFn: (input: A) => B) =>\n (option: Option<A>): Option<B> =>\n option.tag === 'Some' ? some(mapFn(option.value)) : none;\nexport const flatMapOption =\n <A, B>(bindFn: (input: A) => Option<B>) =>\n (option: Option<A>): Option<B> =>\n option.tag === 'Some' ? bindFn(option.value) : none;\nexport const getOrElseOption =\n <A>(onNone: () => A) =>\n (option: Option<A>): A =>\n option.tag === 'Some' ? option.value : onNone();\n\nexport type Result<E, A> =\n | { readonly tag: 'Ok'; readonly value: A }\n | { readonly tag: 'Err'; readonly error: E };\nexport const ok = <A>(value: A): Result<never, A> => ({ tag: 'Ok', value });\nexport const err = <E>(error: E): Result<E, never> => ({ tag: 'Err', error });\nexport const mapResult =\n <E, A, B>(mapFn: (input: A) => B) =>\n (result: Result<E, A>): Result<E, B> =>\n result.tag === 'Ok' ? ok(mapFn(result.value)) : result;\nexport const flatMapResult =\n <E, A, B>(bindFn: (input: A) => Result<E, B>) =>\n (result: Result<E, A>): Result<E, B> =>\n result.tag === 'Ok' ? bindFn(result.value) : result;\n\nexport const unfoldr = <S, A>(\n initial: S,\n step: (state: S) => Option<readonly [A, S]>,\n): ReadonlyArray<A> => {\n const out: A[] = [];\n // eslint-disable-next-line no-constant-condition\n for (let state = initial; ; ) {\n const result = step(state);\n if (result.tag === 'None') {\n break;\n }\n const [element, next] = result.value;\n out.push(element);\n state = next;\n }\n return out;\n};\n", "import { some, none, unfoldr } from '../fp';\nimport type { Chunk } from './model';\nimport { stripAnsiSimple, isStackLine } from '../stacks';\n\nconst isFailureStart = (lineText: string) => /^\\s*\u25CF\\s+/.test(lineText);\nconst isSuiteLine = (lineText: string) => /^\\s*(PASS|FAIL)\\s+/.test(lineText);\nconst isSummaryLine = (lineText: string) =>\n /^\\s*(Test Suites:|Tests:|Snapshots:|Time:|Ran all)/.test(lineText);\n\nconst collectFailure = (\n allLines: ReadonlyArray<string>,\n startIndex: number,\n): readonly [Chunk, number] => {\n const title = stripAnsiSimple(allLines[startIndex]!)\n .replace(/^\\s*\u25CF\\s+/, '')\n .trim();\n const buf: string[] = [allLines[startIndex]!];\n let i = startIndex + 1;\n for (; i < allLines.length; i += 1) {\n const simple = stripAnsiSimple(allLines[i]!);\n const nextIsStart = isFailureStart(simple) || isSuiteLine(simple) || isSummaryLine(simple);\n const prevBlank = stripAnsiSimple(allLines[i - 1] ?? '').trim() === '';\n if (nextIsStart && prevBlank) {\n break;\n }\n buf.push(allLines[i]!);\n }\n return [{ tag: 'FailureBlock', title, lines: buf }, i];\n};\n\nconst parseSuite = (lineText: string): Chunk => {\n const match = lineText.match(/^\\s*(PASS|FAIL)\\s+(.+)$/)!;\n return { tag: 'PassFail', badge: match[1] as 'PASS' | 'FAIL', rel: match[2]! };\n};\n\nexport const parseChunks = (raw: string): ReadonlyArray<Chunk> => {\n const lines = raw.split(/\\r?\\n/);\n type State = { readonly index: number };\n return unfoldr<State, Chunk>({ index: 0 }, (state) => {\n if (state.index >= lines.length) {\n return none;\n }\n const line = lines[state.index]!;\n const simple = stripAnsiSimple(line);\n if (isFailureStart(simple)) {\n const [chunk, next] = collectFailure(lines, state.index);\n return some([chunk, { index: next }]);\n }\n if (isSuiteLine(simple)) {\n return some([parseSuite(simple), { index: state.index + 1 }]);\n }\n if (isSummaryLine(simple)) {\n return some([{ tag: 'Summary', line }, { index: state.index + 1 }]);\n }\n if (isStackLine(simple)) {\n return some([{ tag: 'Stack', line }, { index: state.index + 1 }]);\n }\n return some([{ tag: 'Other', line }, { index: state.index + 1 }]);\n });\n};\n", "import * as path from 'node:path';\n\nimport type { Chunk, Ctx, PrettyFns } from './model';\nimport { ansi } from '../ansi';\nimport { Colors } from '../colors';\nimport { collapseStacks, firstTestLocation, stripAnsiSimple, isStackLine } from '../stacks';\nimport { colorStackLine } from './fns';\n\nconst relPath = (abs: string, cwd: string) => abs.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n\nexport const renderChunks = (\n chunks: ReadonlyArray<Chunk>,\n ctx: Ctx,\n fns: PrettyFns,\n opts?: { readonly onlyFailures?: boolean },\n): { readonly text: string; readonly hadParsed: boolean } => {\n const out: string[] = [];\n const seenFiles = new Set<string>();\n const seenFailures = new Set<string>();\n const onlyFailures = Boolean(opts?.onlyFailures);\n let currentRelFile: string | null = null;\n\n const escapeRegExp = (text: string): string => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n for (const ch of chunks) {\n if (ch.tag === 'PassFail') {\n const rel = relPath(ch.rel, ctx.cwd);\n if (seenFiles.has(rel)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n seenFiles.add(rel);\n currentRelFile = rel;\n if (!(onlyFailures && ch.badge === 'PASS')) {\n out.push(fns.buildFileBadgeLine(rel, ch.badge === 'FAIL' ? 1 : 0));\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n if (ch.tag === 'FailureBlock') {\n out.push(fns.drawFailLine());\n const location = firstTestLocation(ch.lines, ctx.projectHint);\n const rel = location ? relPath(location.split(':')[0] ?? '', ctx.cwd) : '';\n const headerText = rel ? `${rel} > ${ch.title}` : ch.title;\n out.push(`${Colors.Failure('\u00D7')} ${ansi.white(headerText)}`);\n\n const codeStart = fns.findCodeFrameStart(ch.lines);\n const collapsedForSrc = collapseStacks(ch.lines.slice(0));\n const deepestLoc = fns.deepestProjectLoc(collapsedForSrc, ctx.projectHint);\n let effectiveLoc = deepestLoc;\n if (!effectiveLoc && currentRelFile) {\n try {\n const abs = path.resolve(ctx.cwd, currentRelFile);\n const source = ctx.readSource(abs);\n const testName = (() => {\n const parts = ch.title.split('>');\n return (parts[parts.length - 1] || ch.title).trim();\n })();\n const itRe = new RegExp(\n String.raw`\\b(?:it|test)\\s*\\(\\s*['\\\"]${escapeRegExp(testName)}['\\\"]`,\n );\n let index = source.findIndex((line) => itRe.test(line));\n if (index < 0) {\n // fallback: search for expect within file to give some context\n index = source.findIndex((line) => /\\bexpect\\s*\\(/.test(line));\n } else {\n // try to find first expect within the test block window (~80 lines)\n const windowEnd = Math.min(source.length, index + 80);\n for (let i = index; i < windowEnd; i += 1) {\n if (/\\bexpect\\s*\\(/.test(source[i]!)) {\n index = i;\n break;\n }\n }\n }\n if (index >= 0) {\n effectiveLoc = { file: abs.replace(/\\\\/g, '/'), line: index + 1 };\n }\n } catch {\n /* ignore source fallback errors */\n }\n }\n\n if (codeStart >= 0) {\n out.push('', ...fns.buildCodeFrameSection(ch.lines, ctx, effectiveLoc), '');\n } else {\n out.push('', ...fns.buildCodeFrameSection(ch.lines, ctx, effectiveLoc), '');\n }\n const pretty = fns.buildPrettyDiffSection(undefined, ch.lines);\n out.push(...pretty);\n const hasPretty = pretty.length > 0;\n const details = fns.linesFromDetails(undefined);\n // If we found almost no info, synthesize a minimal message section by scanning for\n // non-empty non-stack lines around the code frame / first hint line\n const minimal = (() => {\n const plain = ch.lines.map((ln) => stripAnsiSimple(ln));\n const hint = plain.findIndex(\n (lineText) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(lineText) || /\\bError:?\\b/.test(lineText),\n );\n const acc: string[] = [];\n const start = hint >= 0 ? hint : 0;\n for (let i = start; i < plain.length; i += 1) {\n const ln = plain[i]!;\n if (!ln.trim()) {\n break;\n }\n if (isStackLine(ln)) {\n break;\n }\n acc.push(ln);\n }\n return acc;\n })();\n const collapsedForTail = collapseStacks(ch.lines.slice(0));\n const stackPreview = ctx.showStacks\n ? collapsedForTail\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .filter((ln) => ctx.projectHint.test(stripAnsiSimple(ln)))\n .slice(0, 2)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`)\n : [];\n out.push(\n ...fns.buildMessageSection(minimal.length ? minimal : ch.lines, details, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n if (minimal.length === 0 && fns.buildFallbackMessageBlock) {\n out.push(...fns.buildFallbackMessageBlock(ch.lines, { messages: details.messages }));\n }\n // Extract inline console errors when present in raw output\n const consoleInline = (() => {\n const plain = ch.lines.map((ln) => stripAnsiSimple(ln));\n const cand = plain\n .filter((ln) => /\\bconsole\\.(error|warn)\\s*\\(/i.test(ln) || /^\\s*Error:/.test(ln))\n .map((ln) => ln.trim())\n .filter((ln) => ln.length > 0)\n .sort((a, b) => b.length - a.length)\n .slice(0, 3);\n return cand;\n })();\n if (consoleInline.length > 0) {\n out.push(ansi.dim(' Console errors:'), ...consoleInline.map((ln) => ` ${ln}`), '');\n }\n if (ctx.showStacks && fns.buildStackSection && stackPreview.length === 0) {\n const collapsed = collapseStacks(ch.lines.slice(0));\n out.push(...fns.buildStackSection(collapsed, ctx));\n }\n out.push(fns.drawFailLine(), '');\n if (rel) {\n seenFailures.add(`${rel}|${ch.title}`);\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n if (ch.tag === 'Summary') {\n out.push(ch.line);\n // eslint-disable-next-line no-continue\n continue;\n }\n if (ch.tag === 'Stack') {\n if (ctx.showStacks) {\n out.push(ch.line);\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n // Hide miscellaneous non-failure lines when onlyFailures is true\n if (!onlyFailures) {\n out.push(ch.line);\n }\n }\n const hadParsed =\n seenFiles.size > 0 ||\n seenFailures.size > 0 ||\n out.some((lineText) => /^(?:\\s*)(PASS|FAIL)\\b/.test(stripAnsiSimple(lineText)));\n return { text: out.join('\\n'), hadParsed };\n};\n", "import * 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 { stripAnsiSimple, isStackLine } from '../stacks';\nimport { preferredEditorHref } from '../paths';\nimport type { PrettyFns } from './model';\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\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\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 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\n// ---- Rich helpers (ported/simplified to match old behavior) ----\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport const colorStackLine = (line: string, projectHint: RegExp): string => {\n const plainLine = stripAnsiSimple(line);\n if (!/\\s+at\\s+/.test(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 extractBridgePath = (raw: string, cwd: string): string | null => {\n const re = /Test results written to:\\s+([^\\n\\r]+jest-bridge-[^\\s'\"]+\\.json)/g;\n const matches = Array.from(raw.matchAll(re));\n if (matches.length === 0) {\n return null;\n }\n const jsonPath = (matches[matches.length - 1]![1] ?? '').trim().replace(/^[\"'`]|[\"'`]$/g, '');\n return /^\\//.test(jsonPath) ? jsonPath : `${cwd.replace(/\\\\/g, '/')}/${jsonPath}`;\n};\n\nexport const findCodeFrameStart = (lines: readonly string[]): number =>\n lines.findIndex((line) => /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(line)));\n\nconst _sourceCache = new Map<string, readonly string[]>();\nconst readSource = (file: string): readonly string[] => {\n const normalized = file.replace(/\\\\/g, '/');\n const hit = _sourceCache.get(normalized);\n if (hit) {\n return hit;\n }\n try {\n const arr = fs.readFileSync(normalized, 'utf8').split(/\\r?\\n/);\n _sourceCache.set(normalized, arr);\n return arr;\n } catch {\n return [];\n }\n};\n\nconst renderInlineCodeFrame = (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(` ${Colors.Failure(raw.trimEnd())}`);\n } else {\n const ptr = raw.match(/^\\s*>(\\s*\\d+)\\s*\\|\\s?(.*)$/);\n if (ptr) {\n const num = ansi.dim(ptr[1]!.trim());\n const code = ansi.yellow(ptr[2] ?? '');\n out.push(` ${Colors.Failure('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n const nor = raw.match(/^\\s*(\\d+)\\s*\\|\\s?(.*)$/);\n if (nor) {\n const num = ansi.dim(nor[1]!);\n const code = ansi.dim(nor[2] ?? '');\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${raw}`);\n }\n }\n }\n }\n return out;\n};\n\nconst renderSourceCodeFrame = (file: string, line: number, context = 3): string[] => {\n const lines = readSource(file);\n if (lines.length === 0 || !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 const out: string[] = [];\n for (let current = start; current <= end; current += 1) {\n const num = ansi.dim(String(current));\n const code =\n current === idx ? ansi.yellow(lines[current - 1] ?? '') : ansi.dim(lines[current - 1] ?? '');\n if (current === idx) {\n out.push(` ${Colors.Failure('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n }\n }\n out.push(` ${Colors.Failure('^')}`);\n return out;\n};\n\nconst stackLocation = (line: string): { file: string; line: number } | null => {\n const match = stripAnsiSimple(line).match(/\\(?([^\\s()]+):(\\d+):\\d+\\)?$/);\n if (!match) {\n return null;\n }\n return { file: match[1]!.replace(/\\\\/g, '/'), line: Number(match[2]!) };\n};\n\nexport const deepestProjectLoc: PrettyFns['deepestProjectLoc'] = (stackLines, projectHint) => {\n for (let i = stackLines.length - 1; i >= 0; i -= 1) {\n const simple = stripAnsiSimple(stackLines[i]!);\n if (\n isStackLine(simple) &&\n projectHint.test(simple) &&\n !/node_modules|vitest|jest/.test(simple)\n ) {\n return stackLocation(stackLines[i]!);\n }\n }\n return null;\n};\n\nexport const buildCodeFrameSection: PrettyFns['buildCodeFrameSection'] = (\n messageLines,\n ctx,\n synthLoc,\n): string[] => {\n const out: string[] = [];\n const start = findCodeFrameStart(messageLines);\n if (start >= 0) {\n out.push(...renderInlineCodeFrame(messageLines, start), '');\n return out;\n }\n if (ctx.showStacks && synthLoc) {\n out.push(...renderSourceCodeFrame(synthLoc.file, synthLoc.line), '');\n }\n return out;\n};\n\nconst normalizeBlock = (raw: string) =>\n raw\n .replace(/^\\s*Array\\s*\\[/, '[')\n .replace(/^\\s*Object\\s*\\{/, '{')\n .replace(/,(\\s*[\\]}])/g, '$1');\n\nconst stringifyPrettierish = (value: unknown): string => {\n if (typeof value === 'string') {\n const text = normalizeBlock(value.trim());\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return value;\n }\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return util.inspect(value, {\n depth: 10,\n breakLength: Infinity,\n compact: false,\n sorted: true,\n });\n }\n }\n return util.inspect(value, {\n depth: 10,\n breakLength: Infinity,\n compact: false,\n sorted: true,\n });\n};\n\nconst isArrayOfPrimitives = (\n value: unknown,\n): value is ReadonlyArray<string | number | boolean | null> =>\n Array.isArray(value) &&\n value.every(\n (element) => ['string', 'number', 'boolean'].includes(typeof element) || element === null,\n );\n\nconst extractFromUnifiedDiff = (\n rawLines: readonly string[],\n): { expected?: string; received?: string } => {\n const lines = (rawLines ?? []).map((lineText) => stripAnsiSimple(lineText));\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 const expectedParts: string[] = [];\n const receivedParts: string[] = [];\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 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 if (!opened) {\n const looksLikeStart = /^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(unsigned);\n if (!looksLikeStart) {\n // eslint-disable-next-line no-continue\n continue;\n }\n opened = true;\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 if (!expDone && expectedParts.length > 0) {\n expDone = canParseJsonish(expectedParts.join('\\n'));\n }\n if (!recDone && receivedParts.length > 0) {\n recDone = canParseJsonish(receivedParts.join('\\n'));\n }\n if (opened && expDone && recDone) {\n break;\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 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\nconst extractExpectedReceived = (\n details?: readonly unknown[],\n lines?: readonly string[],\n): { expected?: unknown; received?: unknown } => {\n if (details) {\n for (const detail of details) {\n const dict = isObjectRecord(detail) ? (detail as Record<string, unknown>) : undefined;\n const matcher =\n dict && isObjectRecord(dict.matcherResult)\n ? (dict.matcherResult as Record<string, unknown>)\n : undefined;\n if (matcher) {\n const expectedValue = (matcher as Record<string, unknown>).expected;\n const receivedValue = (matcher as Record<string, unknown>).received;\n // Special-case common Jest matchers to recover clearer numbers/labels\n const matcherName = String(\n ((matcher as Record<string, unknown>).matcherName as unknown) || '',\n );\n if (matcherName === 'toHaveBeenCalledTimes' || matcherName === 'toBeCalledTimes') {\n const getCallsCount = (actual: unknown): number | undefined => {\n if (\n isObjectRecord(actual) &&\n Array.isArray((actual as Record<string, unknown>).calls)\n ) {\n return ((actual as Record<string, unknown>).calls as unknown[]).length;\n }\n if (typeof actual === 'number') {\n return actual;\n }\n if (Array.isArray(actual)) {\n return actual.length;\n }\n return undefined;\n };\n const expectedNumber = getCallsCount(expectedValue);\n const actualValue = (matcher as Record<string, unknown>).actual ?? receivedValue;\n const receivedNumber = getCallsCount(actualValue);\n if (expectedNumber !== undefined || receivedNumber !== undefined) {\n return { expected: expectedNumber, received: receivedNumber };\n }\n }\n // Only trust failureDetails when both sides are provided; otherwise\n // prefer parsing the message lines to avoid showing \"undefined\".\n if (expectedValue !== undefined && receivedValue !== undefined) {\n return { expected: expectedValue, received: receivedValue };\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 // eslint-disable-next-line no-continue\n continue;\n }\n if (/^\\s*Received:/.test(simple)) {\n mode = 'rec';\n receivedLines.push(simple.replace(/^\\s*Received:\\s*/, ''));\n // eslint-disable-next-line no-continue\n continue;\n }\n if (/^\\s*[-+]\\s/.test(simple)) {\n // eslint-disable-next-line no-continue\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 const buildPrettyDiffSection = (\n details?: readonly unknown[],\n messageLines?: readonly string[],\n): string[] => {\n const payload = extractExpectedReceived(details, messageLines);\n if (payload.expected === undefined && payload.received === undefined) {\n return [];\n }\n const expectedString = stringifyPrettierish(payload.expected);\n const receivedString = stringifyPrettierish(payload.received);\n const out: string[] = [];\n const expectedLenLabel = Array.isArray(payload.expected)\n ? ansi.dim(` (len ${(payload.expected as readonly unknown[]).length})`)\n : '';\n out.push(` ${ansi.bold('Expected')}${expectedLenLabel}`);\n out.push(\n expectedString\n .split('\\n')\n .map((expectedLine) => ` ${Colors.Success(expectedLine)}`)\n .join('\\n'),\n );\n const receivedLenLabel = Array.isArray(payload.received)\n ? ansi.dim(` (len ${(payload.received as readonly unknown[]).length})`)\n : '';\n out.push(` ${ansi.bold('Received')}${receivedLenLabel}`);\n out.push(\n receivedString\n .split('\\n')\n .map((receivedLine) => ` ${Colors.Failure(receivedLine)}`)\n .join('\\n'),\n );\n // Optional difference summary for arrays of primitives\n if (isArrayOfPrimitives(payload.expected) && isArrayOfPrimitives(payload.received)) {\n const expectedSet = new Set(\n (payload.expected as ReadonlyArray<unknown>).map((element) => String(element)),\n );\n const receivedSet = new Set(\n (payload.received as ReadonlyArray<unknown>).map((element) => String(element)),\n );\n const missing = Array.from(expectedSet).filter((element) => !receivedSet.has(element));\n const unexpected = Array.from(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:')} ${Colors.Failure(parts.join(ansi.dim(' | ')))}`);\n }\n }\n out.push('');\n return out;\n};\n\nexport const buildMessageSection = (\n messageLines: readonly string[],\n details: { stacks: string[]; messages: string[] },\n _ctx: { projectHint: RegExp; editorCmd: string | undefined; showStacks: boolean },\n opts?: { suppressDiff?: boolean; stackPreview?: readonly string[] },\n): string[] => {\n const out: string[] = [];\n const lines = messageLines.map((lineText) => stripAnsiSimple(lineText));\n const hintIdx = lines.findIndex(\n (candidate) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(candidate) ||\n /\\b(?:AssertionError|Error):/.test(candidate),\n );\n const acc: string[] = [];\n if (hintIdx >= 0) {\n acc.push(lines[hintIdx]!);\n }\n const pushBlock = (start: number) => {\n acc.push(lines[start]!);\n for (let i = start + 1; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (!candidate.trim() || isStackLine(candidate)) {\n break;\n }\n acc.push(candidate);\n }\n };\n const expectedIdx = lines.findIndex((lineText) => /^\\s*Expected:/.test(lineText));\n const receivedIdx = lines.findIndex((lineText) => /^\\s*Received:/.test(lineText));\n const diffIdx = lines.findIndex((lineText) =>\n /^\\s*(?:- Expected|\\+ Received|Difference:)/.test(lineText),\n );\n if (expectedIdx >= 0) {\n pushBlock(expectedIdx);\n }\n if (receivedIdx >= 0) {\n pushBlock(receivedIdx);\n }\n if (diffIdx >= 0) {\n pushBlock(diffIdx);\n }\n const filtered = opts?.suppressDiff\n ? acc.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 : acc;\n const hasOnlyBareError =\n filtered.length === 0 ||\n (filtered.length === 1 && /^\\s*(?:Error|AssertionError):?\\s*$/.test(filtered[0] ?? ''));\n // Fallback: when we only captured a bare \"Error:\" line (regression case),\n // include the immediate non-empty non-stack lines following the hint and any detailed messages\n const fallbackLines: string[] = [];\n if (hasOnlyBareError) {\n const startFrom = hintIdx >= 0 ? hintIdx + 1 : 0;\n let started = false;\n for (let i = startFrom; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (isStackLine(candidate)) {\n break;\n }\n if (!candidate.trim()) {\n if (!started) {\n // Skip leading blank lines after the bare Error:\n // Keep scanning for the first informative line\n // before deciding to stop.\n // eslint-disable-next-line no-continue\n continue;\n }\n break;\n }\n started = true;\n fallbackLines.push(candidate);\n if (fallbackLines.length >= 6) {\n break;\n }\n }\n if (fallbackLines.length === 0 && details && details.messages && details.messages.length) {\n // Use messages extracted from failureDetails as a secondary fallback\n fallbackLines.push(\n ...details.messages\n .map((messageText) => stripAnsiSimple(messageText))\n .filter((messageText) => messageText.trim().length > 0)\n .slice(0, 6),\n );\n }\n }\n if (filtered.length > 0) {\n const label = (() => {\n const joined = filtered.join(' ');\n const matchResult =\n joined.match(/\\b(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/) ||\n joined.match(/\\bError\\b/);\n if (matchResult) {\n const typeName = (matchResult[1] as string | undefined) ?? 'Error';\n return `${typeName}:`;\n }\n return /expect\\(.+?\\)\\.(?:to|not\\.)/.test(joined) ? 'Assertion:' : 'Message:';\n })();\n out.push(` ${ansi.bold(label)}`);\n const body = hasOnlyBareError ? fallbackLines : filtered;\n for (const lineText of body) {\n const colored = /^\\s*-\\s/.test(lineText)\n ? Colors.Failure(lineText)\n : /^\\s*\\+\\s/.test(lineText)\n ? Colors.Success(lineText)\n : lineText;\n out.push(` ${ansi.yellow(colored)}`);\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\nexport const linesFromDetails = (\n details: readonly unknown[] | undefined,\n): { stacks: string[]; messages: string[] } => {\n const stacks: string[] = [];\n const messages: string[] = [];\n if (!details) {\n return { stacks, messages };\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 const visitDeep = (value: unknown, depth: number): void => {\n if (depth > 3 || value == null) {\n return;\n }\n if (typeof value === 'string') {\n pushMaybe(value, messages);\n return;\n }\n if (typeof value !== 'object') {\n return;\n }\n const obj = value as Record<string, unknown>;\n // Common error-like shapes\n if (typeof obj.message === 'string') {\n pushMaybe(obj.message, messages);\n }\n if (typeof obj.stack === 'string') {\n pushMaybe(obj.stack, stacks);\n }\n if (typeof obj.expected === 'string') {\n pushMaybe(obj.expected, messages);\n }\n if (typeof obj.received === 'string') {\n pushMaybe(obj.received, messages);\n }\n // Explore common validation collections:\n // Sequelize (errors), Joi (details), Zod (issues), Yup (inner)\n const arrays = ['errors', 'details', 'issues', 'inner', 'causes', 'aggregatedErrors'];\n for (const key of arrays) {\n const arr = obj[key as keyof typeof obj] as unknown;\n if (Array.isArray(arr)) {\n for (const element of arr) {\n visitDeep(element, depth + 1);\n }\n }\n }\n // Also traverse common nested containers\n const nestedCandidates = ['error', 'cause', 'matcherResult', 'context', 'data'];\n for (const key of nestedCandidates) {\n if (obj[key] && typeof obj[key] === 'object') {\n visitDeep(obj[key], depth + 1);\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 } else if (isObjectRecord(detail)) {\n pushMaybe(detail.stack, stacks);\n pushMaybe(detail.message, messages);\n const err = isObjectRecord(detail.error)\n ? (detail.error as Record<string, unknown>)\n : undefined;\n if (err) {\n pushMaybe(err.stack, stacks);\n pushMaybe(err.message, messages);\n }\n const matcher = isObjectRecord(detail.matcherResult)\n ? (detail.matcherResult as Record<string, unknown>)\n : undefined;\n if (matcher) {\n pushMaybe(matcher.stack, stacks);\n pushMaybe(matcher.message, messages);\n pushMaybe(matcher.expected, messages);\n pushMaybe(matcher.received, messages);\n }\n // Always deep-search to capture validation details nested inside arrays/causes\n visitDeep(detail, 0);\n }\n }\n return { stacks, messages };\n};\n\nexport const buildStackSection = (\n mergedForStack: readonly string[],\n ctx: { projectHint: RegExp; editorCmd?: string; showStacks: boolean },\n fallbackLoc?: { file: string; line: number } | 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 onlyStack = mergedForStack.filter((lineText: string) =>\n isStackLine(stripAnsiSimple(lineText)),\n );\n const tail = onlyStack.slice(-4);\n if (tail.length) {\n for (const frameLine of tail) {\n out.push(` ${colorStackLine(String(frameLine), ctx.projectHint)}`);\n }\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(`${loc.file.split('/').pop()}:${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\nconst MAX_CONSOLE_ERRORS_TO_SHOW = 3;\n\ntype ConsoleEntry = Readonly<{\n type?: unknown;\n message?: unknown;\n origin?: unknown;\n}>;\n\nconst isConsoleEntry = (candidate: unknown): candidate is ConsoleEntry =>\n typeof candidate === 'object' && candidate !== null;\n\nexport const buildConsoleSection = (maybeConsole: unknown): string[] => {\n const out: string[] = [];\n if (!Array.isArray(maybeConsole)) {\n return out;\n }\n const entries = maybeConsole.filter(isConsoleEntry);\n const errorsOnly = entries.filter((entry) => String(entry?.type ?? '').toLowerCase() === 'error');\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\n// Fallback message extraction when assertion messages are sparse or just \"Error:\"\nexport const buildFallbackMessageBlock = (\n messageLines: readonly string[],\n details: { messages: readonly string[] },\n): string[] => {\n const normalize = (arr: readonly string[]) =>\n arr.map((lineText) => stripAnsiSimple(lineText)).filter((line) => line.trim().length > 0);\n const normalized = normalize(messageLines);\n const informative = normalized.filter(\n (line) => !/^\\s*(?:Error|AssertionError):?\\s*$/i.test(line),\n );\n // If caller already has informative lines, they don't need this fallback\n if (informative.length > 0) {\n return [];\n }\n const errorIdx = normalized.findIndex((line) =>\n /(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError|Error):?/i.test(line),\n );\n const collected: string[] = [];\n if (errorIdx >= 0) {\n // Skip the bare error header line; then skip leading blanks until the first informative line\n let started = false;\n for (let i = errorIdx + 1; i < messageLines.length && collected.length < 8; i += 1) {\n const raw = stripAnsiSimple(messageLines[i]!);\n if (isStackLine(raw)) {\n break;\n }\n if (!raw.trim()) {\n if (!started) {\n // eslint-disable-next-line no-continue\n continue;\n }\n break;\n }\n started = true;\n collected.push(raw);\n }\n }\n const fromDetails = collected.length > 0 ? [] : normalize(details.messages).slice(0, 6);\n const linesToShow = collected.length > 0 ? collected : fromDetails;\n if (linesToShow.length === 0) {\n return [];\n }\n const out: string[] = [];\n out.push(` ${ansi.bold('Message:')}`);\n for (const lineText of linesToShow) {\n out.push(` ${ansi.yellow(lineText)}`);\n }\n out.push('');\n return out;\n};\n\n// Thrown object pretty-printer (when we get raw error objects in failureDetails)\nexport const buildThrownSection = (details: readonly unknown[]): string[] => {\n const toLines = (value: unknown): string[] => {\n if (value == null) {\n return [];\n }\n if (typeof value === 'string') {\n return value.split(/\\r?\\n/);\n }\n try {\n return JSON.stringify(value, null, 2).split(/\\r?\\n/);\n } catch {\n return [String(value)];\n }\n };\n const candidates: string[] = [];\n for (const d of details) {\n const obj = d && typeof d === 'object' ? (d as Record<string, unknown>) : null;\n if (obj && obj.error && typeof obj.error === 'object') {\n const err = obj.error as Record<string, unknown>;\n if (typeof err.name === 'string') {\n candidates.push(`name: ${err.name}`);\n }\n if (typeof err.message === 'string') {\n candidates.push(`message: ${err.message}`);\n }\n if (typeof err.code === 'string' || typeof err.code === 'number') {\n candidates.push(`code: ${String(err.code)}`);\n }\n if (typeof err.cause === 'string') {\n candidates.push(`cause: ${err.cause}`);\n }\n if (err.cause && typeof err.cause === 'object') {\n candidates.push('cause:');\n candidates.push(...toLines(err.cause));\n }\n const rest = { ...err };\n delete (rest as any).name;\n delete (rest as any).message;\n delete (rest as any).code;\n delete (rest as any).stack;\n if (Object.keys(rest).length > 0) {\n candidates.push('details:');\n candidates.push(...toLines(rest));\n }\n }\n }\n if (!candidates.length) {\n return [];\n }\n const out: string[] = [];\n out.push(` ${ansi.bold('Thrown:')}`);\n for (const line of candidates.slice(0, 50)) {\n out.push(` ${ansi.yellow(line)}`);\n }\n out.push('');\n return out;\n};\n\nexport const mkPrettyFns = (): PrettyFns => ({\n drawRule,\n drawFailLine,\n renderRunLine,\n buildPerFileOverview,\n buildFileBadgeLine,\n extractBridgePath,\n buildCodeFrameSection,\n buildMessageSection,\n buildPrettyDiffSection,\n buildStackSection,\n deepestProjectLoc,\n findCodeFrameStart,\n linesFromDetails,\n buildFallbackMessageBlock,\n buildThrownSection,\n});\n", "import * as fs from 'node:fs';\n\nexport type Ctx = {\n readonly cwd: string;\n readonly width: number;\n readonly showStacks: boolean;\n readonly projectHint: RegExp;\n readonly editorCmd: string | undefined;\n readonly readSource: (absPath: string) => readonly string[];\n};\n\nexport const makeCtx = (\n opts?: { readonly cwd?: string; readonly editorCmd?: string },\n showStacks = false,\n): Ctx => {\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const readSource = (file: string): readonly string[] => {\n try {\n return fs.readFileSync(file.replace(/\\\\/g, '/'), 'utf8').split(/\\r?\\n/);\n } catch {\n return [];\n }\n };\n return { cwd, width, showStacks, projectHint, editorCmd: opts?.editorCmd, readSource };\n};\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport JSON5 from 'json5';\n\nimport type { Ctx } from '../context';\nimport { extractBridgePath } from './logic';\nimport { coerceJestJsonToBridge, renderVitestFromJestJSON } from './utils';\n\nexport const tryBridgeFallback = (\n raw: string,\n ctx: Ctx,\n opts?: { readonly onlyFailures?: boolean },\n): string | null => {\n let bridgeJsonPath = extractBridgePath(raw, ctx.cwd);\n if (!bridgeJsonPath) {\n const def = path.resolve(ctx.cwd, 'coverage/jest-run.json').replace(/\\\\/g, '/');\n if (fs.existsSync(def)) {\n bridgeJsonPath = def;\n }\n }\n if (!bridgeJsonPath || !fs.existsSync(bridgeJsonPath)) {\n return null;\n }\n try {\n const json = JSON5.parse(fs.readFileSync(bridgeJsonPath, 'utf8'));\n const bridge = coerceJestJsonToBridge(json);\n return renderVitestFromJestJSON(bridge, ctx, opts);\n } catch {\n return null;\n }\n};\n", "import * as path from 'node:path';\n\nexport const 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).replace(/\\\\/g, '/');\n};\n\nexport const isTransportError = (msg?: string): boolean => {\n const lowercaseMessage = (msg ?? '').toLowerCase();\n return /\\bsocket hang up\\b|\\beconnreset\\b|\\betimedout\\b|\\beconnrefused\\b|\\bwrite epipe\\b/.test(\n lowercaseMessage,\n );\n};\n\nexport const parseMethodPathFromTitle = (title?: string): { method?: string; path?: string } => {\n if (!title) {\n return {};\n }\n const matchResult = title.match(/\\b(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\s+([^\\s)]+)/i);\n return matchResult ? { method: matchResult[1]?.toUpperCase(), path: matchResult[2] } : {};\n};\n\nexport const routeSimilarityScore = (\n hint: { method?: string; path?: string },\n evt: { method?: string; route?: string; url?: string },\n): number => {\n if (!hint.path && !hint.method) {\n return 0;\n }\n const methodOk = hint.method && evt.method ? Number(hint.method === evt.method) : 0;\n const route = evt.route || evt.url || '';\n if (!route) {\n return methodOk * 10;\n }\n if (hint.path && route === hint.path) {\n return 500 + methodOk * 50;\n }\n if (hint.path && route.endsWith(hint.path)) {\n return 300 + methodOk * 50;\n }\n if (hint.path && route.includes(hint.path)) {\n return 200 + methodOk * 50;\n }\n return methodOk * 10;\n};\n\nexport type HttpEvent = {\n readonly timestampMs: number;\n readonly kind?: 'response' | 'abort';\n readonly method?: string;\n readonly url?: string;\n readonly route?: string;\n readonly statusCode?: number;\n readonly durationMs?: number;\n readonly contentType?: string;\n readonly requestId?: string;\n readonly json?: unknown;\n readonly bodyPreview?: string;\n readonly testPath?: string;\n readonly currentTestName?: string;\n};\n\nexport type AssertionEvt = {\n readonly timestampMs?: number;\n readonly matcher?: string;\n readonly expectedNumber?: number;\n readonly receivedNumber?: number;\n readonly message?: string;\n readonly stack?: string;\n readonly testPath?: string;\n readonly currentTestName?: string;\n readonly expectedPreview?: string;\n readonly actualPreview?: string;\n};\n\nexport const isHttpStatusNumber = (statusNumber?: number): boolean =>\n typeof statusNumber === 'number' && statusNumber >= 100 && statusNumber <= 599;\n\n// ---- Env-backed knobs ----\nexport const envNumber = (name: string, fallback: number): number => {\n const parsed = Number(process.env[name]);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n};\n\nexport const HEADLAMP_HTTP_WINDOW_MS = () => envNumber('HEADLAMP_HTTP_WINDOW_MS', 3000);\nexport const HEADLAMP_HTTP_STRICT_WINDOW_MS = () =>\n envNumber('HEADLAMP_HTTP_STRICT_WINDOW_MS', 600);\nexport const HEADLAMP_HTTP_MIN_SCORE = () => envNumber('HEADLAMP_HTTP_MIN_SCORE', 1200);\nexport const HEADLAMP_HTTP_DIFF_LIMIT = () => envNumber('HEADLAMP_HTTP_DIFF_LIMIT', 6);\nexport const HEADLAMP_HTTP_SHOW_MISS = () => process.env.HEADLAMP_HTTP_MISS === '1';\n\nexport const eventsNear = (\n http: readonly HttpEvent[],\n ts?: number,\n testPath?: string,\n windowMs = HEADLAMP_HTTP_WINDOW_MS(),\n): readonly HttpEvent[] => {\n if (typeof ts !== 'number' || !Number.isFinite(ts)) {\n return [];\n }\n return http.filter((event) => {\n const timeOk =\n typeof event.timestampMs === 'number' && Math.abs(event.timestampMs - ts) <= windowMs;\n const pathOk = !testPath || event.testPath === testPath;\n return timeOk && pathOk;\n });\n};\n\nexport const scoreHttpForAssertion =\n (assertion: AssertionEvt, titleHint: { method?: string; path?: string }) =>\n (candidateEvent: HttpEvent): number => {\n const tsA = assertion.timestampMs;\n const tsH = candidateEvent.timestampMs;\n const window = isTransportError(assertion.message)\n ? HEADLAMP_HTTP_STRICT_WINDOW_MS()\n : HEADLAMP_HTTP_WINDOW_MS();\n const timeScore =\n typeof tsA === 'number' && typeof tsH === 'number'\n ? Math.max(0, window - Math.abs(tsA - tsH))\n : 0;\n\n const statusScore =\n typeof assertion.receivedNumber === 'number' &&\n candidateEvent.statusCode === assertion.receivedNumber\n ? 1500\n : typeof assertion.expectedNumber === 'number' &&\n candidateEvent.statusCode === assertion.expectedNumber\n ? 1200\n : (candidateEvent.statusCode ?? 0) >= 400\n ? 800\n : 0;\n\n const routeScore = routeSimilarityScore(titleHint, candidateEvent);\n const specificity = candidateEvent.route ? 80 : candidateEvent.url ? 40 : 0;\n\n return timeScore + statusScore + routeScore + specificity;\n };\n\nexport const pickRelevantHttp = (\n assertion: AssertionEvt,\n http: readonly HttpEvent[],\n ctx: { readonly testPath?: string; readonly currentTestName?: string; readonly title?: string },\n): HttpEvent | undefined => {\n const hint = parseMethodPathFromTitle(ctx.title);\n const nameMatches = (leftName?: string, rightName?: string) =>\n !!leftName &&\n !!rightName &&\n (leftName === rightName || leftName.includes(rightName) || rightName.includes(leftName));\n const sameTest = (\n leftCtx?: { testPath?: string; currentTestName?: string },\n rightCtx?: { testPath?: string; currentTestName?: string },\n ) =>\n !!leftCtx &&\n !!rightCtx &&\n leftCtx.testPath === rightCtx.testPath &&\n nameMatches(leftCtx.currentTestName, rightCtx.currentTestName);\n\n const strictPool = http.filter(\n (httpEvent) => sameTest(assertion as any, httpEvent as any) || sameTest(ctx, httpEvent as any),\n );\n\n const windowMs = isTransportError(assertion.message)\n ? HEADLAMP_HTTP_STRICT_WINDOW_MS()\n : HEADLAMP_HTTP_WINDOW_MS();\n\n let pool = strictPool;\n if (!pool.length) {\n pool = http.filter((event) => {\n const samePath = event.testPath === ctx.testPath;\n const tsA = assertion.timestampMs;\n const tsH = event.timestampMs;\n const inWindow =\n typeof tsA === 'number' && typeof tsH === 'number' && Math.abs(tsH - tsA) <= windowMs;\n return samePath && inWindow;\n });\n }\n if (!pool.length) {\n pool = http.filter((event) => {\n const tsA = assertion.timestampMs;\n const tsH = event.timestampMs;\n return typeof tsA === 'number' && typeof tsH === 'number' && Math.abs(tsH - tsA) <= windowMs;\n });\n }\n if (!pool.length) {\n return undefined;\n }\n\n const scored = pool\n .map((httpEvent) => ({ h: httpEvent, s: scoreHttpForAssertion(assertion, hint)(httpEvent) }))\n .sort((leftScore, rightScore) => rightScore.s - leftScore.s);\n\n const [best] = scored;\n const threshold = isTransportError(assertion.message)\n ? Math.max(HEADLAMP_HTTP_MIN_SCORE(), 1400)\n : HEADLAMP_HTTP_MIN_SCORE();\n return best && best.s >= threshold ? best.h : undefined;\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 type { Ctx } from '../context';\nimport { collapseStacks, stripAnsiSimple, isStackLine } from '../../stacks';\nimport {\n drawRule,\n buildPerFileOverview,\n buildFileBadgeLine,\n drawFailLine,\n buildCodeFrameSection,\n buildPrettyDiffSection,\n buildMessageSection,\n linesFromDetails,\n deepestProjectLoc,\n buildConsoleSection,\n colorStackLine,\n buildThrownSection,\n} from '../fns';\nimport { preferredEditorHref } from '../../paths';\nimport type { BridgeJSON } from './types';\nimport {\n parseMethodPathFromTitle,\n pickRelevantHttp,\n isTransportError,\n HEADLAMP_HTTP_WINDOW_MS,\n HEADLAMP_HTTP_DIFF_LIMIT,\n HEADLAMP_HTTP_SHOW_MISS,\n} from './logic';\n\nexport const coerceJestJsonToBridge = (raw: unknown): BridgeJSON => {\n if (raw && typeof raw === 'object' && 'aggregated' in (raw as Record<string, unknown>)) {\n return raw as BridgeJSON;\n }\n type JestAssertionResult = {\n readonly title: string;\n readonly ancestorTitles: string[];\n readonly status: string;\n readonly location?: { readonly line: number; readonly column: number } | null;\n readonly failureMessages?: string[];\n readonly failureDetails?: readonly unknown[];\n readonly fullName?: string;\n readonly duration?: number;\n };\n type JestTestResult = {\n readonly testFilePath?: string;\n readonly name?: string;\n readonly status: 'passed' | 'failed';\n readonly failureMessage?: string;\n readonly assertionResults?: readonly JestAssertionResult[];\n readonly failureDetails?: readonly 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 type JestAggregatedResult = {\n readonly startTime: number;\n readonly success: boolean;\n readonly numTotalTestSuites: number;\n readonly numPassedTestSuites: number;\n readonly numFailedTestSuites: number;\n readonly numTotalTests: number;\n readonly numPassedTests: number;\n readonly numFailedTests: number;\n readonly numPendingTests: number;\n readonly numTodoTests: number;\n readonly testResults: readonly JestTestResult[];\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((tr) => ({\n testFilePath: tr.testFilePath || tr.name || '',\n status: tr.status,\n failureMessage: tr.failureMessage || '',\n failureDetails: tr.failureDetails ?? [],\n testExecError: (tr as any).testExecError ?? null,\n console: tr.console ?? null,\n testResults: (tr.assertionResults || []).map((assertion: JestAssertionResult) => ({\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 failureDetails: assertion.failureDetails || [],\n })),\n })),\n aggregated: {\n numTotalTestSuites: (raw as any).numTotalTestSuites,\n numPassedTestSuites: (raw as any).numPassedTestSuites,\n numFailedTestSuites: (raw as any).numFailedTestSuites,\n numTotalTests: (raw as any).numTotalTests,\n numPassedTests: (raw as any).numPassedTests,\n numFailedTests: (raw as any).numFailedTests,\n numPendingTests: (raw as any).numPendingTests,\n numTodoTests: (raw as any).numTodoTests,\n startTime: (raw as any).startTime,\n success: (raw as any).success,\n runTimeMs: (raw as any).aggregated?.runTimeMs,\n },\n };\n};\n\nconst colorTokens = {\n pass: Colors.Success,\n fail: Colors.Failure,\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};\n\ntype HttpEvent = {\n readonly timestampMs: number;\n readonly kind?: 'response' | 'abort';\n readonly method?: string;\n readonly url?: string;\n readonly route?: string;\n readonly statusCode?: number;\n readonly durationMs?: number;\n readonly contentType?: string;\n readonly requestId?: string;\n readonly json?: unknown;\n readonly bodyPreview?: string;\n readonly testPath?: string;\n readonly currentTestName?: string;\n};\n\ntype AssertionEvt = {\n readonly timestampMs?: number;\n readonly matcher?: string;\n readonly expectedNumber?: number;\n readonly receivedNumber?: number;\n readonly message?: string;\n readonly stack?: string;\n readonly testPath?: string;\n readonly currentTestName?: string;\n readonly expectedPreview?: string;\n readonly actualPreview?: string;\n};\n\nconst by =\n <T>(keySelector: (value: T) => number) =>\n (left: T, right: T) =>\n keySelector(left) - keySelector(right);\n\nconst isObject = (candidateValue: unknown): candidateValue is Record<string, unknown> =>\n !!candidateValue && typeof candidateValue === 'object';\n\nconst asHttpList = (candidateValue: unknown): readonly HttpEvent[] =>\n Array.isArray(candidateValue) ? (candidateValue as readonly HttpEvent[]) : [];\n\nconst summarizeUrl = (method?: string, url?: string, route?: string): string => {\n const base = route || url || '';\n const qs = url && url.includes('?') ? ` ? ${url.split('?')[1]}` : '';\n return [method || '', base, qs].filter(Boolean).join(' ').trim();\n};\n\nconst stripBridgeEventsFromConsole = (maybeConsole: unknown): unknown => {\n if (!Array.isArray(maybeConsole)) {\n return maybeConsole;\n }\n return (maybeConsole as ReadonlyArray<Record<string, unknown>>).filter((entry) => {\n try {\n const raw = Array.isArray(entry.message)\n ? (entry.message as readonly unknown[]).map(String).join(' ')\n : String((entry as Record<string, unknown>).message ?? '');\n return !raw.includes('[JEST-BRIDGE-EVENT]');\n } catch {\n return true;\n }\n });\n};\n\nconst eventsNear = (\n http: readonly HttpEvent[],\n ts?: number,\n testPath?: string,\n windowMs = HEADLAMP_HTTP_WINDOW_MS(),\n): readonly HttpEvent[] => {\n if (typeof ts !== 'number' || !Number.isFinite(ts)) {\n return [];\n }\n return http.filter((event) => {\n const timeOk =\n typeof event.timestampMs === 'number' && Math.abs(event.timestampMs - ts) <= windowMs;\n const pathOk = !testPath || event.testPath === testPath;\n return timeOk && pathOk;\n });\n};\n\nconst isHttpStatusNumber = (statusNumber?: number): boolean =>\n typeof statusNumber === 'number' && statusNumber >= 100 && statusNumber <= 599;\n\nconst inferHttpNumbersFromText = (\n lines: string[],\n): { readonly expectedNumber?: number; readonly receivedNumber?: number } => {\n const text = lines.join('\\n');\n const match = text.match(/Expected:\\s*(\\d{3})[\\s\\S]*?Received:\\s*(\\d{3})/i);\n if (match) {\n return { expectedNumber: Number(match[1]), receivedNumber: Number(match[2]) };\n }\n return {};\n};\n\nconst titleSuggestsHttp = (title?: string): boolean => {\n const { method, path: parsedPath } = parseMethodPathFromTitle(title);\n return Boolean(method || (parsedPath && parsedPath.startsWith('/')));\n};\n\nconst hasStatusSemantics = (assertionLike?: AssertionEvt): boolean => {\n if (!assertionLike) {\n return false;\n }\n if (\n isHttpStatusNumber(assertionLike.expectedNumber) ||\n isHttpStatusNumber(assertionLike.receivedNumber)\n ) {\n return true;\n }\n const combinedRaw = `${assertionLike.matcher ?? ''} ${assertionLike.message ?? ''}`;\n const combinedMessage = combinedRaw.toLowerCase();\n return /\\bstatus(code)?\\b|\\btohaves(tatus|tatuscode)\\b/.test(combinedMessage);\n};\n\nconst fileSuggestsHttp = (relPath: string): boolean =>\n /(?:^|\\/)(routes?|api|controllers?|e2e|integration)(?:\\/|\\.test\\.)/i.test(relPath);\n\nconst isHttpRelevant = (ctx: {\n readonly assertion?: AssertionEvt;\n readonly title?: string;\n readonly relPath: string;\n readonly httpCountInSameTest: number;\n readonly hasTransportSignal: boolean;\n}): boolean =>\n ctx.hasTransportSignal ||\n ctx.httpCountInSameTest > 0 ||\n titleSuggestsHttp(ctx.title) ||\n hasStatusSemantics(ctx.assertion) ||\n fileSuggestsHttp(ctx.relPath);\n\nconst vitestFooter = (agg: BridgeJSON['aggregated'], durationMs?: number): 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 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 const time =\n durationMs != null\n ? `${Math.max(0, Math.round(durationMs))}ms`\n : typeof agg.runTimeMs === 'number'\n ? `${Math.max(0, Math.round(agg.runTimeMs))}ms`\n : '';\n const thread = ansi.dim('(in thread 0ms, 0.00%)');\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 const renderVitestFromJestJSON = (\n data: BridgeJSON,\n ctx: Ctx,\n opts?: { readonly onlyFailures?: boolean },\n): string => {\n const out: string[] = [];\n const onlyFailures = Boolean(opts?.onlyFailures);\n // Top RUN line (hide when onlyFailures)\n if (!onlyFailures) {\n out.push(`${BackgroundColors.Run(ansi.white(' RUN '))} ${ansi.dim(ctx.cwd)}`, '');\n }\n for (const file of data.testResults) {\n const rel = file.testFilePath.replace(/\\\\/g, '/').replace(`${ctx.cwd}/`, '');\n const failed = file.testResults.filter((assertion) => assertion.status === 'failed');\n // Per-file overview list (hide when onlyFailures)\n if (!onlyFailures) {\n out.push(...buildPerFileOverview(rel, file.testResults));\n }\n // File header block with PASS/FAIL badge\n if (!(onlyFailures && failed.length === 0)) {\n out.push(buildFileBadgeLine(rel, failed.length));\n }\n // Parse bridge events once per file; use them later per assertion\n let httpSorted: ReadonlyArray<HttpEvent> = [];\n let assertionEvents: ReadonlyArray<AssertionEvt> = [];\n {\n const parseBridge = (\n consoleEntries: unknown,\n ): { http: readonly HttpEvent[]; assertions: readonly AssertionEvt[] } => {\n const http: HttpEvent[] = [];\n const assertions: AssertionEvt[] = [];\n if (!Array.isArray(consoleEntries)) {\n return { http, assertions };\n }\n for (const entry of consoleEntries) {\n const rec = entry as Record<string, unknown>;\n const rawMsgVal = rec && typeof rec.message !== 'undefined' ? rec.message : '';\n const raw = Array.isArray(rawMsgVal)\n ? (rawMsgVal as unknown[]).map(String).join(' ')\n : String(rawMsgVal ?? '');\n if (!raw.includes('[JEST-BRIDGE-EVENT]')) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const jsonText = raw.split('[JEST-BRIDGE-EVENT]').pop()?.trim() ?? '';\n try {\n const evt = JSON5.parse(jsonText) as Record<string, unknown>;\n const type = evt?.type as string | undefined;\n if (type === 'httpResponse') {\n const timestampMs = Number((evt as any).timestampMs ?? Date.now());\n http.push({\n kind: 'response',\n timestampMs,\n method: (evt as any).method,\n url: (evt as any).url,\n route: (evt as any).route,\n statusCode: (evt as any).statusCode,\n durationMs: (evt as any).durationMs,\n contentType: (evt as any).contentType,\n requestId: (evt as any).requestId,\n json: (evt as any).json,\n bodyPreview: (evt as any).bodyPreview,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n });\n } else if (type === 'httpAbort') {\n http.push({\n kind: 'abort',\n timestampMs: Number((evt as any).timestampMs ?? Date.now()),\n method: (evt as any).method,\n url: (evt as any).url,\n route: (evt as any).route,\n durationMs: (evt as any).durationMs,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n });\n } else if (type === 'httpResponseBatch') {\n const list = asHttpList((evt as any)?.events);\n for (const item of list) {\n const anyItem = item as any;\n http.push({\n timestampMs: Number(anyItem.timestampMs ?? Date.now()),\n method: anyItem.method,\n url: anyItem.url,\n route: anyItem.route,\n statusCode: anyItem.statusCode,\n durationMs: anyItem.durationMs,\n contentType: anyItem.contentType,\n requestId: anyItem.requestId,\n json: anyItem.json,\n bodyPreview: anyItem.bodyPreview,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n });\n }\n } else if (type === 'assertionFailure') {\n assertions.push({\n timestampMs:\n typeof (evt as any).timestampMs === 'number'\n ? ((evt as any).timestampMs as number)\n : undefined,\n matcher: (evt as any).matcher,\n expectedNumber:\n typeof (evt as any).expectedNumber === 'number'\n ? ((evt as any).expectedNumber as number)\n : undefined,\n receivedNumber:\n typeof (evt as any).receivedNumber === 'number'\n ? ((evt as any).receivedNumber as number)\n : undefined,\n message:\n typeof (evt as any).message === 'string'\n ? ((evt as any).message as string)\n : undefined,\n stack:\n typeof (evt as any).stack === 'string'\n ? ((evt as any).stack as string)\n : undefined,\n testPath: (evt as any).testPath as string | undefined,\n currentTestName: (evt as any).currentTestName as string | undefined,\n expectedPreview:\n typeof (evt as any).expectedPreview === 'string'\n ? ((evt as any).expectedPreview as string)\n : undefined,\n actualPreview:\n typeof (evt as any).actualPreview === 'string'\n ? ((evt as any).actualPreview as string)\n : undefined,\n });\n }\n } catch {\n /* ignore malformed */\n }\n }\n return { http, assertions };\n };\n\n const parsed = parseBridge(file.console);\n httpSorted = [...parsed.http].sort(by<HttpEvent>((event) => event.timestampMs));\n assertionEvents = parsed.assertions;\n }\n const inSameCtx = (testPath?: string, testName?: string) =>\n httpSorted.filter(\n (event) => event.testPath === testPath && event.currentTestName === testName,\n );\n // File-level failure when there are NO per-assertion failures\n if (file.failureMessage || file.testExecError) {\n const lines = file.failureMessage.split(/\\r?\\n/);\n const combinedDetails = (() => {\n const base = linesFromDetails(file.failureDetails);\n const exec = linesFromDetails(\n Array.isArray(file.testExecError)\n ? (file.testExecError as unknown[])\n : [file.testExecError],\n );\n return {\n stacks: [...base.stacks, ...exec.stacks],\n messages: [...base.messages, ...exec.messages],\n };\n })();\n const mergedForStack = collapseStacks([...lines, ...combinedDetails.stacks]);\n const synthLoc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n out.push(...buildCodeFrameSection(lines, ctx, synthLoc));\n const payloadPretty = buildPrettyDiffSection(file.failureDetails, lines);\n out.push(...payloadPretty);\n const hasPretty = payloadPretty.length > 0;\n const stackPreview = ctx.showStacks\n ? mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .filter((ln) => ctx.projectHint.test(stripAnsiSimple(ln)))\n .slice(0, 2)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`)\n : [];\n out.push(\n ...buildMessageSection(lines, combinedDetails, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n out.push(...buildConsoleSection(stripBridgeEventsFromConsole(file.console ?? null)));\n // full stack tail if not inlined\n if (ctx.showStacks && stackPreview.length === 0) {\n const tail = mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .slice(-4)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`);\n if (tail.length) {\n out.push(ansi.dim(' Stack:'), ...tail, '');\n }\n }\n }\n for (const assertion of failed) {\n out.push(drawFailLine());\n const header = `${rel} > ${assertion.fullName}`;\n const messagesArray: string[] = (() => {\n if (assertion.failureMessages && assertion.failureMessages.length > 0) {\n return assertion.failureMessages;\n }\n if (file.failureMessage && file.failureMessage.trim().length > 0) {\n return file.failureMessage.split(/\\r?\\n/);\n }\n // Fallbacks: use matcherResult.message from failureDetails if present\n const linesFromMatcher = linesFromDetails(\n assertion.failureDetails || file.failureDetails,\n ).messages;\n if (Array.isArray(linesFromMatcher) && linesFromMatcher.length > 0) {\n return linesFromMatcher;\n }\n return [''];\n })();\n const details = linesFromDetails(assertion.failureDetails || file.failureDetails);\n // Prefer explicit matcher message if present in failureDetails\n const matcherMsg = (() => {\n try {\n const arr = (assertion.failureDetails || file.failureDetails) as\n | readonly unknown[]\n | undefined;\n if (!arr) {\n return [] as string[];\n }\n for (const detailEntry of arr) {\n const obj =\n detailEntry && typeof detailEntry === 'object'\n ? (detailEntry as Record<string, unknown>)\n : null;\n const mr =\n obj && obj.matcherResult && typeof obj.matcherResult === 'object'\n ? (obj.matcherResult as Record<string, unknown>)\n : null;\n if (mr && typeof mr.message === 'string' && mr.message.trim()) {\n const name = typeof mr.matcherName === 'string' ? mr.matcherName : '';\n const matcherHeader = name ? ` ${ansi.bold('Matcher:')} ${ansi.yellow(name)}` : '';\n const bodyHeader = ` ${ansi.bold('Message:')}`;\n const body = String(mr.message)\n .split(/\\r?\\n/)\n .slice(0, 6)\n .map((ln) => ` ${ansi.yellow(ln)}`);\n return [matcherHeader, bodyHeader, ...body, ''].filter(Boolean) as string[];\n }\n }\n } catch {\n /* ignore */\n }\n return [] as string[];\n })();\n const mergedForStack = collapseStacks([...messagesArray, ...details.stacks]);\n const deepestLoc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n const locLink = deepestLoc\n ? (() => {\n const href = preferredEditorHref(deepestLoc.file, deepestLoc.line, ctx.editorCmd);\n const base = `${deepestLoc.file.split('/').pop()}:${deepestLoc.line}`;\n return osc8(base, href);\n })()\n : undefined;\n const bullet = (text: string) => `${Colors.Failure('\u00D7')} ${ansi.white(text)}`;\n const headerLine = `${ansi.white(header)}${locLink ? ` ${ansi.dim(`(${locLink})`)}` : ''}`;\n out.push(bullet(headerLine));\n const msgLines = messagesArray.join('\\n').split('\\n');\n const assertFallback =\n deepestLoc ||\n (assertion.location && { file: file.testFilePath, line: assertion.location.line });\n out.push('', ...buildCodeFrameSection(msgLines, ctx, assertFallback || undefined), '');\n const pretty = buildPrettyDiffSection(\n assertion.failureDetails || file.failureDetails,\n msgLines,\n );\n out.push(...pretty);\n const hasPretty = pretty.length > 0;\n const stackPreview = ctx.showStacks\n ? mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .filter((ln) => ctx.projectHint.test(stripAnsiSimple(ln)))\n .slice(0, 2)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`)\n : [];\n if (matcherMsg.length) {\n out.push(...matcherMsg);\n }\n out.push(\n ...buildMessageSection(msgLines, details, ctx, { suppressDiff: hasPretty, stackPreview }),\n );\n // ---- Compact HTTP Cause Card per failed assertion ----\n {\n type JsonPathChange = {\n readonly path: string;\n readonly kind: 'added' | 'removed' | 'changed';\n readonly preview?: string;\n };\n const HEADLAMP_HTTP_DIFF_LIMIT_LOCAL = (): number => HEADLAMP_HTTP_DIFF_LIMIT();\n const safeParseJSON = (text?: string): unknown | undefined => {\n try {\n return text ? JSON5.parse(text) : undefined;\n } catch {\n return undefined;\n }\n };\n const jsonDiff = (\n expected: unknown,\n actual: unknown,\n limit = HEADLAMP_HTTP_DIFF_LIMIT_LOCAL(),\n ): readonly JsonPathChange[] => {\n const outChanges: JsonPathChange[] = [];\n const queue: Array<{ pathSoFar: string; expectedValue: unknown; actualValue: unknown }> =\n [];\n queue.push({\n pathSoFar: '$',\n expectedValue: expected,\n actualValue: actual,\n });\n while (queue.length && outChanges.length < limit) {\n const { pathSoFar, expectedValue, actualValue } = queue.shift()!;\n const expectedIsObj = expectedValue && typeof expectedValue === 'object';\n const actualIsObj = actualValue && typeof actualValue === 'object';\n if (!expectedIsObj && !actualIsObj) {\n if (JSON.stringify(expectedValue) !== JSON.stringify(actualValue)) {\n outChanges.push({\n kind: 'changed',\n path: pathSoFar,\n preview: `${String(expectedValue)} \u2192 ${String(actualValue)}`,\n });\n }\n } else if (expectedIsObj && !actualIsObj) {\n outChanges.push({\n kind: 'changed',\n path: pathSoFar,\n preview: '[object] \u2192 primitive',\n });\n } else if (!expectedIsObj && actualIsObj) {\n outChanges.push({\n kind: 'changed',\n path: pathSoFar,\n preview: 'primitive \u2192 [object]',\n });\n } else {\n const expectedKeys = new Set(Object.keys(expectedValue as Record<string, unknown>));\n const actualKeys = new Set(Object.keys(actualValue as Record<string, unknown>));\n for (const key of expectedKeys) {\n if (!actualKeys.has(key) && outChanges.length < limit) {\n outChanges.push({ kind: 'removed', path: `${pathSoFar}.${key}` });\n }\n }\n for (const key of actualKeys) {\n if (!expectedKeys.has(key) && outChanges.length < limit) {\n outChanges.push({ kind: 'added', path: `${pathSoFar}.${key}` });\n }\n }\n for (const key of expectedKeys) {\n if (actualKeys.has(key) && outChanges.length < limit) {\n queue.push({\n pathSoFar: `${pathSoFar}.${key}`,\n expectedValue: (expectedValue as any)[key],\n actualValue: (actualValue as any)[key],\n });\n }\n }\n }\n }\n return outChanges;\n };\n const importantMessages = (json: unknown): readonly string[] => {\n const msgs: string[] = [];\n try {\n const obj = isObject(json) ? json : {};\n const pushMaybe = (candidate?: unknown) => {\n if (typeof candidate === 'string' && candidate.trim()) {\n msgs.push(candidate);\n }\n };\n (pushMaybe as any)((obj as any).displayMessage);\n (pushMaybe as any)((obj as any).message);\n if (Array.isArray((obj as any).errors)) {\n for (const element of (obj as any).errors as unknown[]) {\n pushMaybe(isObject(element) ? (element as any).message : undefined);\n }\n }\n if (Array.isArray((obj as any).data)) {\n for (const element of (obj as any).data as unknown[]) {\n pushMaybe(isObject(element) ? (element as any).message : undefined);\n }\n }\n } catch {\n /* ignore */\n }\n return msgs.slice(0, 2);\n };\n\n const nameMatches = (leftName?: string, rightName?: string) =>\n !!leftName &&\n !!rightName &&\n (leftName === rightName || leftName.includes(rightName) || rightName.includes(leftName));\n const corresponding =\n assertionEvents.find(\n (aevt) =>\n aevt.testPath === file.testFilePath &&\n nameMatches(aevt.currentTestName, assertion.title as string),\n ) ?? (assertion as unknown as AssertionEvt);\n\n const perTestSlice = inSameCtx(file.testFilePath, assertion.title as string);\n const nearByTime = eventsNear(\n httpSorted,\n (corresponding as any)?.timestampMs as number | undefined,\n file.testFilePath,\n );\n const hasAbort = perTestSlice.some((event) => event.kind === 'abort');\n const hasTransport = isTransportError((corresponding as any)?.message) || hasAbort;\n\n const httpLikely = isHttpRelevant({\n assertion: corresponding as AssertionEvt,\n title: assertion.fullName,\n relPath: rel,\n httpCountInSameTest: perTestSlice.length || nearByTime.length,\n hasTransportSignal: hasTransport,\n });\n\n if (!httpLikely) {\n /* no http section */\n } else {\n const expPreview = (corresponding as any)?.expectedPreview as string | undefined;\n const actPreview = (corresponding as any)?.actualPreview as string | undefined;\n const parsedExpected = safeParseJSON(expPreview);\n const parsedActual = safeParseJSON(actPreview);\n\n let corr = corresponding as AssertionEvt;\n if (\n !isHttpStatusNumber(corr.expectedNumber) &&\n !isHttpStatusNumber(corr.receivedNumber)\n ) {\n const inferred = inferHttpNumbersFromText(msgLines);\n if (\n isHttpStatusNumber(inferred.expectedNumber) ||\n isHttpStatusNumber(inferred.receivedNumber)\n ) {\n corr = { ...corr, ...inferred } as AssertionEvt;\n }\n }\n\n const relevant = pickRelevantHttp(\n {\n timestampMs: (corr as any)?.timestampMs,\n expectedNumber: (corr as any)?.expectedNumber,\n receivedNumber: (corr as any)?.receivedNumber,\n matcher: (corr as any)?.matcher,\n message: (corr as any)?.message,\n stack: (corr as any)?.stack,\n testPath: file.testFilePath,\n currentTestName: assertion.title,\n },\n httpSorted,\n {\n testPath: file.testFilePath,\n currentTestName: assertion.title as string,\n title: assertion.fullName,\n },\n );\n\n if (hasTransport) {\n const tsBase = ((corresponding as any)?.timestampMs ?? 0) as number;\n const abortCandidates = perTestSlice\n .filter((event) => event.kind === 'abort')\n .sort((leftEvent, rightEvent) => {\n const deltaLeft = Math.abs(tsBase - (leftEvent.timestampMs ?? 0));\n const deltaRight = Math.abs(tsBase - (rightEvent.timestampMs ?? 0));\n return deltaLeft - deltaRight;\n });\n const [nearestAbort] = abortCandidates;\n if (nearestAbort) {\n out.push(\n ' HTTP:',\n `\\n ${summarizeUrl(nearestAbort.method, nearestAbort.url, nearestAbort.route)} ${ansi.dim('->')} ${ansi.yellow('connection aborted')}`,\n (() => {\n const ms = nearestAbort.durationMs;\n return ms != null ? ` ${ansi.dim(`(${ms}ms)`)} ` : '';\n })(),\n '\\n',\n );\n } else if (relevant) {\n // fall through to normal rendering below\n } else if (HEADLAMP_HTTP_SHOW_MISS()) {\n out.push(\n ' HTTP:',\n `\\n ${ansi.dim('Transport error; no matching HTTP exchange in window.')}`,\n '\\n',\n );\n }\n }\n\n if (!hasTransport && relevant) {\n const parts: string[] = [];\n const where = summarizeUrl(relevant.method, relevant.url, relevant.route);\n const line1 = [\n ' HTTP:',\n `\\n ${where} ${ansi.dim('->')} ${relevant.statusCode ?? '?'}`,\n (() => {\n const ms = relevant.durationMs;\n return typeof ms === 'number' ? ` ${ansi.dim(`(${ms}ms)`)} ` : ' ';\n })(),\n relevant.contentType ? ansi.dim(`(${relevant.contentType})`) : '',\n relevant.requestId ? ansi.dim(` reqId=${relevant.requestId}`) : '',\n ].join('');\n const expVsAct = (() => {\n if (\n typeof (corresponding as any)?.expectedNumber === 'number' ||\n typeof (corresponding as any)?.receivedNumber === 'number'\n ) {\n const exp =\n (corresponding as any)?.expectedNumber != null\n ? String((corresponding as any).expectedNumber)\n : '?';\n const got =\n (corresponding as any)?.receivedNumber != null\n ? String((corresponding as any).receivedNumber)\n : String(relevant.statusCode ?? '?');\n return `\\n Expected: ${ansi.yellow(exp)} Received: ${ansi.yellow(got)}`;\n }\n return '';\n })();\n const whyLines = importantMessages(relevant.json)\n .map((msg) => `\\n Why: ${ansi.white(msg)}`)\n .slice(0, 1)\n .join('');\n const diffLines = (() => {\n const rightActual = parsedActual ?? relevant.json;\n if (!parsedExpected || !rightActual) {\n return '';\n }\n const changes = jsonDiff(parsedExpected, rightActual);\n if (!changes.length) {\n return '';\n }\n const head = '\\n Diff:';\n const body = changes\n .map((change) => {\n const marker =\n change.kind === 'added' ? '+' : change.kind === 'removed' ? '-' : '~';\n const previewText = change.preview ? `: ${ansi.dim(change.preview)}` : '';\n return `\\n ${marker} ${change.path}${previewText}`;\n })\n .join('');\n return head + body;\n })();\n parts.push(line1, expVsAct, whyLines, diffLines, '\\n');\n out.push(...parts.filter(Boolean));\n } else if (!hasTransport && !relevant && HEADLAMP_HTTP_SHOW_MISS()) {\n out.push(\n ' HTTP:',\n `\\n ${ansi.dim('No relevant HTTP exchange found. (HEADLAMP_HTTP_MISS=0 to hide)')}`,\n '\\n',\n );\n }\n }\n }\n // If still little context, print a compact thrown object section\n const minimalInfo = msgLines.every((ln) => !ln.trim());\n if (minimalInfo) {\n try {\n out.push(...buildThrownSection(assertion.failureDetails || []));\n } catch {\n /* ignore thrown section errors */\n }\n }\n // include any captured console error output for this file\n out.push(...buildConsoleSection(stripBridgeEventsFromConsole(file.console ?? null)));\n // full stack tail if not inlined\n if (ctx.showStacks && stackPreview.length === 0) {\n const tail = mergedForStack\n .filter((ln) => isStackLine(stripAnsiSimple(ln)))\n .slice(-4)\n .map((ln) => ` ${colorStackLine(String(ln), ctx.projectHint)}`);\n if (tail.length) {\n out.push(ansi.dim(' Stack:'), ...tail, '');\n }\n }\n out.push(drawFailLine(), '');\n }\n }\n // Dashed rule + right-aligned pill (always show final summary)\n const failedCount = data.aggregated.numFailedTests;\n out.push(drawRule(BackgroundColors.Failure(ansi.white(` Failed Tests ${failedCount} `))));\n out.push('');\n out.push(vitestFooter(data.aggregated));\n return out.join('\\n');\n};\n", "import { stripAnsiSimple } from './stacks';\nimport { pipe } from './fp';\nimport { parseChunks } from './formatter/parse';\nimport { renderChunks } from './formatter/render';\nimport { makeCtx } from './formatter/context';\nimport { mkPrettyFns } from './formatter/fns';\nimport { tryBridgeFallback } from './formatter/bridge';\n\nexport type FormatOpts = {\n readonly cwd?: string;\n readonly editorCmd?: string;\n readonly onlyFailures?: boolean;\n};\n\nexport const formatJestOutputVitest = (raw: string, opts?: FormatOpts): string =>\n pipe(\n { raw, opts },\n (state) => ({\n ...state,\n ctx: makeCtx(state.opts, /\\bFAIL\\b/.test(stripAnsiSimple(state.raw))),\n }),\n (state) => ({ ...state, chunks: parseChunks(state.raw) }),\n (state) => ({\n ...state,\n native: renderChunks(state.chunks, state.ctx, mkPrettyFns(), {\n onlyFailures: Boolean(state.opts?.onlyFailures),\n }).text,\n }),\n (state) => ({\n ...state,\n bridge:\n tryBridgeFallback(state.raw, state.ctx, {\n onlyFailures: Boolean(state.opts?.onlyFailures),\n }) || null,\n }),\n (state) => {\n const out: string[] = [];\n const seen = new Set<string>();\n const pushUnique = (text?: string | null) => {\n if (!text) {\n return;\n }\n for (const line of text.split(/\\r?\\n/)) {\n const key = stripAnsiSimple(line);\n if (!seen.has(key)) {\n out.push(line);\n seen.add(key);\n }\n }\n };\n pushUnique(state.native);\n if (state.bridge) {\n if (out.length) {\n out.push('');\n }\n pushUnique(state.bridge);\n }\n return out.join('\\n');\n },\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": ["resolve", "resolve", "path", "os", "uniq", "exports", "module", "exports", "module", "exports", "module", "util", "key", "token", "c", "buffer", "exports", "module", "util", "value", "exports", "module", "JSON5", "path", "os", "fsSync", "fs", "import_istanbul_lib_coverage", "path", "fs", "path", "path", "stat", "babelNodeBin", "jestBin", "fs", "path", "picomatch", "path", "fsSync", "path", "relPath", "ext", "stem", "hideMiddle", "label", "headRaw", "tailRaw", "extractImportSpecs", "step", "path", "fs", "JSON5", "normalize", "fs", "readSource", "fs", "path", "import_json5", "path", "extractBridgePath", "import_json5", "colorTokens", "relPath", "JSON5", "extractBridgePath", "JSON5", "rels", "prodSelections", "cachedRelated", "findRelatedTestsFast", "DEFAULT_TEST_GLOBS", "DEFAULT_EXCLUDE", "relPath"]
7
7
  }