headlamp 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/lib/args.ts", "../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/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/ansi.ts", "../src/lib/paths.ts", "../src/lib/stacks.ts", "../src/lib/colors.ts", "../src/lib/bars.ts", "../src/lib/table.ts", "../src/index.ts", "../src/lib/discovery.ts", "../src/lib/graph-distance.ts", "../src/lib/path-resolver.ts", "../src/lib/coverage-core.ts", "../src/lib/coverage-print.ts", "../src/lib/jest-bridge.ts", "../src/lib/program.ts"],
4
- "sourcesContent": ["import * as path from 'node:path';\n\nexport type Action =\n | { readonly type: 'coverage'; readonly coverageValue: boolean }\n | { readonly type: 'coverageUi'; readonly value: 'jest' | 'both' }\n | { readonly type: 'coverageAbortOnFailure'; readonly value: boolean }\n | { readonly type: 'jestArg'; readonly value: string }\n | { readonly type: 'jestArgs'; readonly values: readonly string[] }\n | { readonly type: 'vitestArg'; readonly value: string }\n | { readonly type: 'bothArg'; readonly value: string }\n | { readonly type: 'selectionHint' }\n | { readonly type: 'coverageInclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageExclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageEditor'; readonly value: string }\n | { readonly type: 'coverageRoot'; readonly value: string }\n | { readonly type: 'selectionPath'; readonly value: string }\n | { readonly type: 'coverageDetail'; readonly value?: number | 'all' }\n | { readonly type: 'coverageShowCode'; readonly value: boolean }\n | { readonly type: 'coverageMode'; readonly value: 'compact' | 'full' }\n | { readonly type: 'coverageMaxFiles'; readonly value: number }\n | { readonly type: 'coverageMaxHotspots'; readonly value: number }\n | { readonly type: 'coveragePageFit'; readonly value: boolean };\n\nexport const ActionBuilders = {\n coverage: (coverageValue: boolean): Action => ({ type: 'coverage', coverageValue }),\n coverageUi: (value: 'jest' | 'both'): Action => ({ type: 'coverageUi', value }),\n coverageAbortOnFailure: (value: boolean): Action => ({ type: 'coverageAbortOnFailure', value }),\n jestArg: (value: string): Action => ({ type: 'jestArg', value }),\n jestArgs: (values: readonly string[]): Action => ({ type: 'jestArgs', values }),\n vitestArg: (value: string): Action => ({ type: 'vitestArg', value }),\n bothArg: (value: string): Action => ({ type: 'bothArg', value }),\n selectionHint: (): Action => ({ type: 'selectionHint' }),\n coverageInclude: (values: readonly string[]): Action => ({ type: 'coverageInclude', values }),\n coverageExclude: (values: readonly string[]): Action => ({ type: 'coverageExclude', values }),\n coverageEditor: (value: string): Action => ({ type: 'coverageEditor', value }),\n coverageRoot: (value: string): Action => ({ type: 'coverageRoot', value }),\n selectionPath: (value: string): Action => ({ type: 'selectionPath', value }),\n coverageDetail: (value?: number | 'all'): Action =>\n value !== undefined ? { type: 'coverageDetail', value } : { type: 'coverageDetail' },\n coverageShowCode: (value: boolean): Action => ({ type: 'coverageShowCode', value }),\n coverageMode: (value: 'compact' | 'full'): Action => ({ type: 'coverageMode', value }),\n coverageMaxFiles: (value: number): Action => ({ type: 'coverageMaxFiles', value }),\n coverageMaxHotspots: (value: number): Action => ({ type: 'coverageMaxHotspots', value }),\n coveragePageFit: (value: boolean): Action => ({ type: 'coveragePageFit', value }),\n} as const;\n\ntype State = { actions: Action[]; skipNext: boolean };\nexport type Step = readonly [readonly Action[], boolean];\nexport type RuleEnv = { readonly lookahead?: string; readonly jestFlags: ReadonlySet<string> };\ntype Opt<T> = { readonly _tag: 'some'; readonly value: T } | { readonly _tag: 'none' };\nconst Some = <T>(value: T): Opt<T> => ({ _tag: 'some', value });\nconst None: Opt<never> = { _tag: 'none' } as const;\nconst isSome = <T>(opt: Opt<T>): opt is { readonly _tag: 'some'; readonly value: T } =>\n opt._tag === 'some';\n\nconst step = (actions: readonly Action[], skipNext: boolean = false): Step =>\n [actions, skipNext] as const;\n\nexport type Rule = (value: string, env: RuleEnv) => Opt<Step>;\nexport const rule = {\n when:\n (\n predicate: (value: string, env: RuleEnv) => boolean,\n build: (value: string, env: RuleEnv) => Step,\n ): Rule =>\n (value, env) =>\n predicate(value, env) ? Some(build(value, env)) : None,\n eq: (flag: string, build: () => Step): Rule =>\n rule.when(\n (value) => value === flag,\n () => build(),\n ),\n startsWith: (prefix: string, build: (value: string) => Step): Rule =>\n rule.when(\n (value) => value.startsWith(prefix),\n (value) => build(value),\n ),\n inSet: (select: (env: RuleEnv) => ReadonlySet<string>, build: (value: string) => Step): Rule =>\n rule.when(\n (value, env) => select(env).has(value),\n (value) => build(value),\n ),\n withLookahead: (\n lookaheadFlag: string,\n build: (flagToken: string, lookahead: string) => Step,\n ): Rule =>\n rule.when(\n (value, env) =>\n value === lookaheadFlag && typeof env.lookahead === 'string' && env.lookahead.length > 0,\n (value, env) => build(value, env.lookahead!),\n ),\n} as const;\n\nconst STRING_EMPTY = '' as const;\nconst STRING_TRUE = 'true' as const;\nconst STRING_ONE = '1' as const;\nconst INDEX_STEP = 1 as const;\n\nexport const isTruthy = (value: string): boolean =>\n value === STRING_TRUE || value === STRING_ONE || value === STRING_EMPTY;\n\nexport const parseActionsFromTokens = (tokens: readonly string[]): readonly Action[] => {\n const jestOnlyFlags = new Set(['--ci', '--detectOpenHandles', '--forceExit', '--runInBand']);\n\n const parseCoverageUiString = (raw: string): 'jest' | 'both' => {\n const normalized = String(raw).toLowerCase();\n return normalized === 'jest' ? 'jest' : 'both';\n };\n\n const rules: readonly Rule[] = [\n // --coverage (enable), and --coverage=true/false\n rule.eq('--coverage', () => step([ActionBuilders.coverage(true)])),\n rule.startsWith('--coverage=', (value) =>\n step([ActionBuilders.coverage(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()))]),\n ),\n // --coverage.abortOnFailure\n rule.eq('--coverage.abortOnFailure', () => step([ActionBuilders.coverageAbortOnFailure(true)])),\n rule.startsWith('--coverage.abortOnFailure=', (value) =>\n step([\n ActionBuilders.coverageAbortOnFailure(\n isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.abortOnFailure', (_flag, lookahead) =>\n step([ActionBuilders.coverageAbortOnFailure(isTruthy(String(lookahead)))], true),\n ),\n rule.startsWith('--coverage-ui=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.startsWith('--coverageUi=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.withLookahead('--coverage-ui', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n rule.withLookahead('--coverageUi', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n\n rule.eq('--coverage.detail', () => step([ActionBuilders.coverageDetail()])),\n rule.startsWith('--coverage.detail=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)]);\n }),\n rule.withLookahead('--coverage.detail', (_flag, lookahead) => {\n const raw = String(lookahead).trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)], true);\n }),\n\n rule.eq('--coverage.showCode', () => step([ActionBuilders.coverageShowCode(true)])),\n rule.startsWith('--coverage.showCode=', (value) => {\n const flagValue = (value.split('=')[1] ?? '').trim().toLowerCase();\n return step([\n ActionBuilders.coverageShowCode(\n flagValue === 'true' || flagValue === '1' || flagValue === '',\n ),\n ]);\n }),\n rule.withLookahead('--coverage.showCode', (_flag, lookahead) =>\n step([ActionBuilders.coverageShowCode(isTruthy(String(lookahead)))], true),\n ),\n\n rule.startsWith('--coverage.mode=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const mode = raw === 'compact' ? 'compact' : 'full';\n return step([ActionBuilders.coverageMode(mode)]);\n }),\n rule.withLookahead('--coverage.mode', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageMode(\n String(lookahead).trim().toLowerCase() === 'compact' ? 'compact' : 'full',\n ),\n ],\n true,\n ),\n ),\n rule.eq('--coverage.compact', () => step([ActionBuilders.coverageMode('compact')])),\n\n rule.startsWith('--coverage.maxFiles=', (value) => {\n const maxFilesCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxFilesCount) ? [ActionBuilders.coverageMaxFiles(maxFilesCount)] : [],\n );\n }),\n rule.startsWith('--coverage.maxHotspots=', (value) => {\n const maxHotspotsCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxHotspotsCount)\n ? [ActionBuilders.coverageMaxHotspots(maxHotspotsCount)]\n : [],\n );\n }),\n rule.eq('--coverage.pageFit', () => step([ActionBuilders.coveragePageFit(true)])),\n rule.startsWith('--coverage.pageFit=', (value) =>\n step([\n ActionBuilders.coveragePageFit(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase())),\n ]),\n ),\n rule.withLookahead('--coverage.pageFit', (_flag, lookahead) =>\n step([ActionBuilders.coveragePageFit(isTruthy(String(lookahead)))], true),\n ),\n\n rule.withLookahead('--testPathPattern', (flag, lookahead) =>\n step([ActionBuilders.jestArgs([flag, lookahead])], true),\n ),\n rule.startsWith('--testPathPattern=', (value) => step([ActionBuilders.jestArg(value)])),\n rule.inSet(\n (env) => env.jestFlags,\n (value) => step([ActionBuilders.jestArg(value)]),\n ),\n\n rule.when(\n (value) => value === '--watch' || value === '-w',\n () => step([ActionBuilders.vitestArg('--watch'), ActionBuilders.jestArg('--watch')]),\n ),\n rule.eq('--watchAll', () => step([ActionBuilders.jestArg('--watchAll')])),\n\n rule.startsWith('--coverage.include=', (value) =>\n step([\n ActionBuilders.coverageInclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.include', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageInclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.exclude=', (value) =>\n step([\n ActionBuilders.coverageExclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.exclude', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageExclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.editor=', (value) =>\n step([ActionBuilders.coverageEditor((value.split('=')[1] ?? '').trim())]),\n ),\n rule.startsWith('--coverage.root=', (value) =>\n step([ActionBuilders.coverageRoot((value.split('=')[1] ?? '').trim())]),\n ),\n\n rule.withLookahead('-t', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n rule.withLookahead('--testNamePattern', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n ] as const;\n\n const init: State = { actions: [], skipNext: false };\n\n const final = tokens.reduce<State>((state, token, index) => {\n if (state.skipNext) {\n return { actions: state.actions, skipNext: false };\n }\n const tokenValue = token ?? STRING_EMPTY;\n const nextToken = tokens[index + INDEX_STEP];\n let env: RuleEnv = { jestFlags: jestOnlyFlags };\n if (typeof nextToken === 'string' && nextToken.length > 0) {\n env = { jestFlags: jestOnlyFlags, lookahead: nextToken };\n }\n\n const firstMatch = (rs: readonly Rule[], value: string, envForRules: RuleEnv) => {\n for (const ruleFn of rs) {\n const match = ruleFn(value, envForRules);\n if (isSome(match)) {\n return match;\n }\n }\n return None as Opt<Step>;\n };\n\n const matched = firstMatch(rules, tokenValue, env);\n\n const isTestFileToken = (candidate: string) =>\n /\\.(test|spec)\\.[tj]sx?$/.test(candidate) || /(^|\\/)tests?\\//.test(candidate);\n const isPathLike = (candidate: string) =>\n /[\\\\/]/.test(candidate) || /\\.(m?[tj]sx?)$/i.test(candidate);\n\n const [matchedActions, shouldSkipNext] = isSome(matched)\n ? matched.value\n : (() => {\n const base = [ActionBuilders.bothArg(tokenValue)];\n const withSelection =\n isTestFileToken(tokenValue) || isPathLike(tokenValue)\n ? [\n ...base,\n ActionBuilders.selectionHint(),\n ...(isPathLike(tokenValue) ? [ActionBuilders.selectionPath(tokenValue)] : []),\n ]\n : base;\n return step(withSelection);\n })();\n\n return { actions: [...state.actions, ...matchedActions], skipNext: shouldSkipNext };\n }, init);\n\n return final.actions as readonly Action[];\n};\n\nexport type ParsedArgs = {\n readonly vitestArgs: readonly string[];\n readonly jestArgs: readonly string[];\n readonly collectCoverage: boolean;\n readonly coverageUi: 'jest' | 'both';\n readonly coverageAbortOnFailure: boolean;\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode: boolean;\n readonly coverageMode: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit: boolean;\n};\n\ntype Contrib = {\n readonly vitest: readonly string[];\n readonly jest: readonly string[];\n readonly coverage: boolean;\n readonly coverageUi?: ParsedArgs['coverageUi'];\n readonly coverageAbortOnFailure?: boolean;\n readonly selection?: boolean;\n readonly include?: readonly string[];\n readonly exclude?: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly selectionPaths?: readonly string[];\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n};\n\nconst emptyContrib: Contrib = {\n vitest: [],\n jest: [],\n coverage: false,\n coverageDetail: 'auto',\n coverageMode: 'auto',\n};\n\nconst toContrib = (action: Action): Contrib => {\n switch (action.type) {\n case 'coverage':\n return { vitest: [], jest: [], coverage: action.coverageValue };\n case 'coverageUi':\n return { vitest: [], jest: [], coverage: false, coverageUi: action.value };\n case 'coverageAbortOnFailure':\n return { vitest: [], jest: [], coverage: false, coverageAbortOnFailure: action.value };\n case 'jestArgs':\n return { vitest: [], jest: action.values, coverage: false };\n case 'selectionHint':\n return { vitest: [], jest: [], coverage: false, selection: true };\n case 'coverageInclude':\n return { vitest: [], jest: [], coverage: false, include: action.values };\n case 'coverageExclude':\n return { vitest: [], jest: [], coverage: false, exclude: action.values };\n case 'coverageEditor':\n return { vitest: [], jest: [], coverage: false, editorCmd: action.value };\n case 'coverageRoot':\n return { vitest: [], jest: [], coverage: false, workspaceRoot: action.value };\n case 'selectionPath':\n return { vitest: [], jest: [], coverage: false, selectionPaths: [action.value] };\n case 'coverageDetail': {\n const detailValue: Contrib['coverageDetail'] = action.value ?? 'auto';\n return { vitest: [], jest: [], coverage: false, coverageDetail: detailValue };\n }\n case 'coverageShowCode':\n return { vitest: [], jest: [], coverage: false, coverageShowCode: action.value };\n case 'coverageMode':\n return { vitest: [], jest: [], coverage: false, coverageMode: action.value };\n case 'coverageMaxFiles':\n return { vitest: [], jest: [], coverage: false, coverageMaxFiles: action.value };\n case 'coverageMaxHotspots':\n return { vitest: [], jest: [], coverage: false, coverageMaxHotspots: action.value };\n case 'coveragePageFit':\n return { vitest: [], jest: [], coverage: false, coveragePageFit: action.value };\n case 'jestArg':\n return { vitest: [], jest: [action.value], coverage: false };\n case 'vitestArg':\n return { vitest: [action.value], jest: [], coverage: false };\n case 'bothArg':\n return { vitest: [action.value], jest: [action.value], coverage: false };\n default: {\n const neverGuard: never = action;\n return neverGuard;\n }\n }\n};\n\nexport const combineContrib = (left: Contrib, right: Contrib): Contrib => {\n const base: Contrib = {\n vitest: left.vitest.concat(right.vitest),\n jest: left.jest.concat(right.jest),\n coverage: left.coverage || right.coverage,\n include: [...(left.include ?? []), ...(right.include ?? [])],\n exclude: [...(left.exclude ?? []), ...(right.exclude ?? [])],\n selection: Boolean(left.selection || right.selection),\n selectionPaths: [...(left.selectionPaths ?? []), ...(right.selectionPaths ?? [])],\n };\n const next: Contrib = { ...base } as Contrib;\n const editor = right.editorCmd ?? left.editorCmd;\n if (editor !== undefined) {\n (next as unknown as { editorCmd: string }).editorCmd = editor;\n }\n const root = right.workspaceRoot ?? left.workspaceRoot;\n if (root !== undefined) {\n (next as unknown as { workspaceRoot: string }).workspaceRoot = root;\n }\n if (right.coverageUi !== undefined) {\n return { ...next, coverageUi: right.coverageUi } as Contrib;\n }\n if (left.coverageUi !== undefined) {\n return { ...next, coverageUi: left.coverageUi } as Contrib;\n }\n return {\n ...next,\n ...(right.coverageAbortOnFailure !== undefined || left.coverageAbortOnFailure !== undefined\n ? { coverageAbortOnFailure: right.coverageAbortOnFailure ?? left.coverageAbortOnFailure }\n : {}),\n ...(right.coverageDetail !== undefined || left.coverageDetail !== undefined\n ? { coverageDetail: right.coverageDetail ?? left.coverageDetail }\n : {}),\n ...(right.coverageShowCode !== undefined || left.coverageShowCode !== undefined\n ? { coverageShowCode: right.coverageShowCode ?? left.coverageShowCode }\n : {}),\n ...(right.coverageMode !== undefined || left.coverageMode !== undefined\n ? { coverageMode: right.coverageMode ?? left.coverageMode }\n : {}),\n ...(right.coverageMaxFiles !== undefined || left.coverageMaxFiles !== undefined\n ? { coverageMaxFiles: right.coverageMaxFiles ?? left.coverageMaxFiles }\n : {}),\n ...(right.coverageMaxHotspots !== undefined || left.coverageMaxHotspots !== undefined\n ? { coverageMaxHotspots: right.coverageMaxHotspots ?? left.coverageMaxHotspots }\n : {}),\n ...(right.coveragePageFit !== undefined || left.coveragePageFit !== undefined\n ? { coveragePageFit: right.coveragePageFit ?? left.coveragePageFit }\n : {}),\n } as Contrib;\n};\n\nexport const DEFAULT_INCLUDE = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'] as const;\nexport const DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/coverage/**',\n '**/dist/**',\n '**/build/**',\n '**/migrations/**',\n '**/__mocks__/**',\n] as const;\n\nexport const deriveArgs = (argv: readonly string[]): ParsedArgs => {\n const vitestArgs: string[] = ['run'];\n const jestArgs: string[] = ['--detectOpenHandles', '--forceExit', '--runInBand'];\n let collectCoverage = false;\n let coverageUi: ParsedArgs['coverageUi'] = 'both';\n let coverageAbortOnFailure = false;\n let coverageShowCode = Boolean(process.stdout.isTTY);\n let coverageMode: ParsedArgs['coverageMode'] = 'auto';\n const coverageMaxFilesLocalInit: number | undefined = undefined;\n const coverageMaxHotspotsLocalInit: number | undefined = undefined;\n let coverageMaxFilesLocal: number | undefined = coverageMaxFilesLocalInit;\n let coverageMaxHotspotsLocal: number | undefined = coverageMaxHotspotsLocalInit;\n let coveragePageFit = Boolean(process.stdout.isTTY);\n\n const uiEnv = (process.env.COVERAGE_UI ?? '').toLowerCase();\n if (uiEnv === 'both' || uiEnv === 'jest') {\n coverageUi = uiEnv as ParsedArgs['coverageUi'];\n }\n\n const contrib = parseActionsFromTokens(argv).map(toContrib).reduce(combineContrib, emptyContrib);\n vitestArgs.push(...contrib.vitest);\n jestArgs.push(...contrib.jest);\n collectCoverage ||= contrib.coverage;\n coverageUi = contrib.coverageUi ?? coverageUi;\n coverageAbortOnFailure = contrib.coverageAbortOnFailure ?? coverageAbortOnFailure;\n coverageShowCode = contrib.coverageShowCode ?? coverageShowCode;\n const coverageDetailComputed: ParsedArgs['coverageDetail'] | undefined =\n contrib.coverageDetail ?? (contrib.selection ? 'auto' : undefined);\n coverageMode = contrib.coverageMode ?? (contrib.selection ? 'compact' : 'auto');\n coverageMaxFilesLocal = contrib.coverageMaxFiles ?? coverageMaxFilesLocal;\n coverageMaxHotspotsLocal = contrib.coverageMaxHotspots ?? coverageMaxHotspotsLocal;\n coveragePageFit = contrib.coveragePageFit ?? coveragePageFit;\n\n if (collectCoverage) {\n jestArgs.push(\n '--coverage',\n '--coverageProvider=babel',\n '--coverageReporters=lcov',\n '--coverageReporters=json',\n '--coverageReporters=text-summary',\n '--coverageDirectory=coverage/jest',\n );\n }\n\n const selectionLooksLikeTestPath = (contrib.selectionPaths ?? []).some(\n (selectionPath) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(selectionPath) || /(^|\\/)tests?\\//i.test(selectionPath),\n );\n const inferredFromSelection = (contrib.selectionPaths ?? [])\n .map((pathToken) => {\n const normalized = path.normalize(pathToken).replace(/\\\\/g, '/');\n const isDir = !/\\.(m?[tj]sx?)$/i.test(normalized);\n const base = isDir\n ? normalized.replace(/\\/+$/, '')\n : path.dirname(normalized).replace(/\\\\/g, '/');\n return base.length ? `${base}/**/*` : '**/*';\n })\n .filter((glob, index, arr) => arr.indexOf(glob) === index);\n\n const includeGlobs = (contrib.include ?? []).length\n ? (contrib.include as string[])\n : selectionLooksLikeTestPath\n ? [...DEFAULT_INCLUDE]\n : inferredFromSelection.length\n ? inferredFromSelection\n : [...DEFAULT_INCLUDE];\n const excludeGlobs = (contrib.exclude ?? []).length\n ? (contrib.exclude as string[])\n : [...DEFAULT_EXCLUDE];\n\n const out: ParsedArgs = {\n vitestArgs,\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified: Boolean(contrib.selection),\n selectionPaths: [...(contrib.selectionPaths ?? [])],\n includeGlobs,\n excludeGlobs,\n coverageShowCode,\n ...(coverageDetailComputed !== undefined ? { coverageDetail: coverageDetailComputed } : {}),\n coverageMode,\n ...(coverageMaxFilesLocal !== undefined ? { coverageMaxFiles: coverageMaxFilesLocal } : {}),\n ...(coverageMaxHotspotsLocal !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsLocal }\n : {}),\n coveragePageFit,\n ...(contrib.editorCmd !== undefined ? { editorCmd: contrib.editorCmd } : {}),\n ...(contrib.workspaceRoot !== undefined ? { workspaceRoot: contrib.workspaceRoot } : {}),\n };\n return out;\n};\n", "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", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\n\nconst TailSegmentCount = 2 as const;\nconst EmptyCount = 0 as const;\nconst JsonIndentSpaces = 2 as const;\n\nexport const DEFAULT_TEST_GLOBS = [\n \"**/*.{test,spec}.{ts,tsx,js,jsx}\",\n \"tests/**/*.{ts,tsx,js,jsx}\",\n] as const;\n\nexport type FindRelatedOpts = {\n readonly repoRoot: string;\n readonly productionPaths: readonly string[];\n readonly testGlobs?: readonly string[];\n readonly excludeGlobs?: readonly string[];\n readonly timeoutMs?: number;\n};\n\nexport const findRelatedTestsFast = async (\n opts: FindRelatedOpts\n): Promise<readonly string[]> => {\n const repoRoot = path.resolve(opts.repoRoot);\n const testGlobs = opts.testGlobs ?? DEFAULT_TEST_GLOBS;\n const excludeGlobs = opts.excludeGlobs ?? [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/.next/**\",\n ];\n\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRoot, abs).replace(/\\\\/g, \"/\");\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, \"\");\n const base = path.basename(withoutExt);\n const segs = withoutExt.split(\"/\");\n const tail2 = segs.slice(-TailSegmentCount).join(\"/\");\n const uniq = Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));\n return uniq;\n };\n\n const seeds = Array.from(\n new Set(\n opts.productionPaths\n .map((productionPath) => path.resolve(productionPath))\n .flatMap(toSeeds)\n )\n );\n if (seeds.length === EmptyCount) {\n return [] as string[];\n }\n\n try {\n const rgVersion = await runText(\"rg\", [\"--version\"], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n });\n if (!rgVersion) {\n return [] as string[];\n }\n } catch {\n return [] as string[];\n }\n\n const args: string[] = [\"-n\", \"-l\", \"-S\", \"-F\"];\n testGlobs.forEach((globPattern) => args.push(\"-g\", globPattern));\n excludeGlobs.forEach((excludeGlobPattern) =>\n args.push(\"-g\", `!${excludeGlobPattern}`)\n );\n seeds.forEach((seedToken) => args.push(\"-e\", seedToken));\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", [...args, repoRoot], {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n });\n } catch {\n raw = \"\";\n }\n\n const lines = raw\n .split(/\\r?\\n/)\n .map((lineText) => lineText.trim())\n .filter(Boolean);\n\n const looksLikeTest = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n\n const absolute = lines\n .map((relativePath) =>\n path.resolve(repoRoot, relativePath).replace(/\\\\/g, \"/\")\n )\n .filter(looksLikeTest);\n\n const uniq = Array.from(new Set(absolute));\n const results: string[] = [];\n await Promise.all(\n uniq.map(async (absolutePath) => {\n try {\n await fs.access(absolutePath);\n results.push(absolutePath);\n } catch {\n /* ignore */\n }\n })\n );\n return results;\n};\n\nexport const cachedRelated = async (opts: {\n readonly repoRoot: string;\n readonly selectionKey: string;\n readonly compute: () => Promise<readonly string[]>;\n}): Promise<readonly string[]> => {\n const cacheDir = path.join(opts.repoRoot, \".cache\");\n const cacheFile = path.join(cacheDir, \"relevant-tests.json\");\n\n let head = \"nogit\";\n try {\n const raw = await runText(\n \"git\",\n [\"-C\", opts.repoRoot, \"rev-parse\", \"--short\", \"HEAD\"],\n {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n }\n );\n head = raw.trim() || \"nogit\";\n } catch {\n head = \"nogit\";\n }\n\n const key = `${head}::${opts.selectionKey}`;\n\n let bag: Record<string, string[]> = {};\n try {\n const read = await fs.readFile(cacheFile, \"utf8\");\n bag = JSON.parse(read) as Record<string, string[]>;\n } catch {\n bag = {};\n }\n\n const hit = bag[key];\n if (hit?.length) {\n // Validate cached paths still exist on disk; if any are missing, recompute\n const existing: string[] = [];\n await Promise.all(\n hit.map(async (candidatePath) => {\n try {\n await fs.access(candidatePath);\n existing.push(candidatePath);\n } catch {\n // missing \u2192 ignore; will trigger recompute below\n }\n })\n );\n if (existing.length === hit.length) {\n return existing as readonly string[];\n }\n // One or more cached entries are stale; recompute and refresh cache\n const recomputed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(recomputed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(\n cacheFile,\n JSON.stringify(next, null, JsonIndentSpaces)\n );\n } catch {\n /* ignore cache write errors */\n }\n return recomputed as readonly string[];\n }\n\n const computed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(computed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(cacheFile, JSON.stringify(next, null, JsonIndentSpaces));\n } catch {\n /* ignore cache write errors */\n }\n return computed;\n};\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.exports.ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n isSpaceSeparator (c) {\n return typeof c === 'string' && unicode.Space_Separator.test(c)\n },\n\n isIdStartChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c === '$') || (c === '_') ||\n unicode.ID_Start.test(c)\n )\n },\n\n isIdContinueChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c >= '0' && c <= '9') ||\n (c === '$') || (c === '_') ||\n (c === '\\u200C') || (c === '\\u200D') ||\n unicode.ID_Continue.test(c)\n )\n },\n\n isDigit (c) {\n return typeof c === 'string' && /[0-9]/.test(c)\n },\n\n isHexDigit (c) {\n return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n source = String(text)\n parseState = 'start'\n stack = []\n pos = 0\n line = 1\n column = 0\n token = undefined\n key = undefined\n root = undefined\n\n do {\n token = lex()\n\n // This code is unreachable.\n // if (!parseStates[parseState]) {\n // throw invalidParseState()\n // }\n\n parseStates[parseState]()\n } while (token.type !== 'eof')\n\n if (typeof reviver === 'function') {\n return internalize({'': root}, '', reviver)\n }\n\n return root\n}\n\nfunction internalize (holder, name, reviver) {\n const value = holder[name]\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const key = String(i)\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n } else {\n for (const key in value) {\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n }\n\n return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n lexState = 'default'\n buffer = ''\n doubleQuote = false\n sign = 1\n\n for (;;) {\n c = peek()\n\n // This code is unreachable.\n // if (!lexStates[lexState]) {\n // throw invalidLexState(lexState)\n // }\n\n const token = lexStates[lexState]()\n if (token) {\n return token\n }\n }\n}\n\nfunction peek () {\n if (source[pos]) {\n return String.fromCodePoint(source.codePointAt(pos))\n }\n}\n\nfunction read () {\n const c = peek()\n\n if (c === '\\n') {\n line++\n column = 0\n } else if (c) {\n column += c.length\n } else {\n column++\n }\n\n if (c) {\n pos += c.length\n }\n\n return c\n}\n\nconst lexStates = {\n default () {\n switch (c) {\n case '\\t':\n case '\\v':\n case '\\f':\n case ' ':\n case '\\u00A0':\n case '\\uFEFF':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n return\n\n case '/':\n read()\n lexState = 'comment'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n if (util.isSpaceSeparator(c)) {\n read()\n return\n }\n\n // This code is unreachable.\n // if (!lexStates[parseState]) {\n // throw invalidLexState(parseState)\n // }\n\n return lexStates[parseState]()\n },\n\n comment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineComment'\n return\n\n case '/':\n read()\n lexState = 'singleLineComment'\n return\n }\n\n throw invalidChar(read())\n },\n\n multiLineComment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineCommentAsterisk'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n },\n\n multiLineCommentAsterisk () {\n switch (c) {\n case '*':\n read()\n return\n\n case '/':\n read()\n lexState = 'default'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n lexState = 'multiLineComment'\n },\n\n singleLineComment () {\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n lexState = 'default'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n read()\n },\n\n value () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n case 'n':\n read()\n literal('ull')\n return newToken('null', null)\n\n case 't':\n read()\n literal('rue')\n return newToken('boolean', true)\n\n case 'f':\n read()\n literal('alse')\n return newToken('boolean', false)\n\n case '-':\n case '+':\n if (read() === '-') {\n sign = -1\n }\n\n lexState = 'sign'\n return\n\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n buffer = ''\n lexState = 'string'\n return\n }\n\n throw invalidChar(read())\n },\n\n identifierNameStartEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n break\n\n default:\n if (!util.isIdStartChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n identifierName () {\n switch (c) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n buffer += read()\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameEscape'\n return\n }\n\n if (util.isIdContinueChar(c)) {\n buffer += read()\n return\n }\n\n return newToken('identifier', buffer)\n },\n\n identifierNameEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n break\n\n default:\n if (!util.isIdContinueChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n sign () {\n switch (c) {\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', sign * Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n }\n\n throw invalidChar(read())\n },\n\n zero () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n\n case 'x':\n case 'X':\n buffer += read()\n lexState = 'hexadecimal'\n return\n }\n\n return newToken('numeric', sign * 0)\n },\n\n decimalInteger () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalPointLeading () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalPoint () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalFraction () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalExponent () {\n switch (c) {\n case '+':\n case '-':\n buffer += read()\n lexState = 'decimalExponentSign'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentSign () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentInteger () {\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n hexadecimal () {\n if (util.isHexDigit(c)) {\n buffer += read()\n lexState = 'hexadecimalInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n hexadecimalInteger () {\n if (util.isHexDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n string () {\n switch (c) {\n case '\\\\':\n read()\n buffer += escape()\n return\n\n case '\"':\n if (doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case \"'\":\n if (!doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case '\\n':\n case '\\r':\n throw invalidChar(read())\n\n case '\\u2028':\n case '\\u2029':\n separatorChar(c)\n break\n\n case undefined:\n throw invalidChar(read())\n }\n\n buffer += read()\n },\n\n start () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n // This code is unreachable since the default lexState handles eof.\n // case undefined:\n // return newToken('eof')\n }\n\n lexState = 'value'\n },\n\n beforePropertyName () {\n switch (c) {\n case '$':\n case '_':\n buffer = read()\n lexState = 'identifierName'\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameStartEscape'\n return\n\n case '}':\n return newToken('punctuator', read())\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n lexState = 'string'\n return\n }\n\n if (util.isIdStartChar(c)) {\n buffer += read()\n lexState = 'identifierName'\n return\n }\n\n throw invalidChar(read())\n },\n\n afterPropertyName () {\n if (c === ':') {\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforePropertyValue () {\n lexState = 'value'\n },\n\n afterPropertyValue () {\n switch (c) {\n case ',':\n case '}':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforeArrayValue () {\n if (c === ']') {\n return newToken('punctuator', read())\n }\n\n lexState = 'value'\n },\n\n afterArrayValue () {\n switch (c) {\n case ',':\n case ']':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n end () {\n // This code is unreachable since it's handled by the default lexState.\n // if (c === undefined) {\n // read()\n // return newToken('eof')\n // }\n\n throw invalidChar(read())\n },\n}\n\nfunction newToken (type, value) {\n return {\n type,\n value,\n line,\n column,\n }\n}\n\nfunction literal (s) {\n for (const c of s) {\n const p = peek()\n\n if (p !== c) {\n throw invalidChar(read())\n }\n\n read()\n }\n}\n\nfunction escape () {\n const c = peek()\n switch (c) {\n case 'b':\n read()\n return '\\b'\n\n case 'f':\n read()\n return '\\f'\n\n case 'n':\n read()\n return '\\n'\n\n case 'r':\n read()\n return '\\r'\n\n case 't':\n read()\n return '\\t'\n\n case 'v':\n read()\n return '\\v'\n\n case '0':\n read()\n if (util.isDigit(peek())) {\n throw invalidChar(read())\n }\n\n return '\\0'\n\n case 'x':\n read()\n return hexEscape()\n\n case 'u':\n read()\n return unicodeEscape()\n\n case '\\n':\n case '\\u2028':\n case '\\u2029':\n read()\n return ''\n\n case '\\r':\n read()\n if (peek() === '\\n') {\n read()\n }\n\n return ''\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n throw invalidChar(read())\n\n case undefined:\n throw invalidChar(read())\n }\n\n return read()\n}\n\nfunction hexEscape () {\n let buffer = ''\n let c = peek()\n\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n let buffer = ''\n let count = 4\n\n while (count-- > 0) {\n const c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n }\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n start () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforePropertyName () {\n switch (token.type) {\n case 'identifier':\n case 'string':\n key = token.value\n parseState = 'afterPropertyName'\n return\n\n case 'punctuator':\n // This code is unreachable since it's handled by the lexState.\n // if (token.value !== '}') {\n // throw invalidToken()\n // }\n\n pop()\n return\n\n case 'eof':\n throw invalidEOF()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterPropertyName () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator' || token.value !== ':') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n parseState = 'beforePropertyValue'\n },\n\n beforePropertyValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforeArrayValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n if (token.type === 'punctuator' && token.value === ']') {\n pop()\n return\n }\n\n push()\n },\n\n afterPropertyValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforePropertyName'\n return\n\n case '}':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterArrayValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforeArrayValue'\n return\n\n case ']':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n end () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'eof') {\n // throw invalidToken()\n // }\n },\n}\n\nfunction push () {\n let value\n\n switch (token.type) {\n case 'punctuator':\n switch (token.value) {\n case '{':\n value = {}\n break\n\n case '[':\n value = []\n break\n }\n\n break\n\n case 'null':\n case 'boolean':\n case 'numeric':\n case 'string':\n value = token.value\n break\n\n // This code is unreachable.\n // default:\n // throw invalidToken()\n }\n\n if (root === undefined) {\n root = value\n } else {\n const parent = stack[stack.length - 1]\n if (Array.isArray(parent)) {\n parent.push(value)\n } else {\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n\n if (value !== null && typeof value === 'object') {\n stack.push(value)\n\n if (Array.isArray(value)) {\n parseState = 'beforeArrayValue'\n } else {\n parseState = 'beforePropertyName'\n }\n } else {\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n }\n}\n\nfunction pop () {\n stack.pop()\n\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n// return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n// return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n if (c === undefined) {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n }\n\n return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n// if (token.type === 'eof') {\n// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n// }\n\n// const c = String.fromCodePoint(token.value.codePointAt(0))\n// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n column -= 5\n return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n if (replacements[c]) {\n return replacements[c]\n }\n\n if (c < ' ') {\n const hexString = c.charCodeAt(0).toString(16)\n return '\\\\x' + ('00' + hexString).substring(hexString.length)\n }\n\n return c\n}\n\nfunction syntaxError (message) {\n const err = new SyntaxError(message)\n err.lineNumber = line\n err.columnNumber = column\n return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n const stack = []\n let indent = ''\n let propertyList\n let replacerFunc\n let gap = ''\n let quote\n\n if (\n replacer != null &&\n typeof replacer === 'object' &&\n !Array.isArray(replacer)\n ) {\n space = replacer.space\n quote = replacer.quote\n replacer = replacer.replacer\n }\n\n if (typeof replacer === 'function') {\n replacerFunc = replacer\n } else if (Array.isArray(replacer)) {\n propertyList = []\n for (const v of replacer) {\n let item\n\n if (typeof v === 'string') {\n item = v\n } else if (\n typeof v === 'number' ||\n v instanceof String ||\n v instanceof Number\n ) {\n item = String(v)\n }\n\n if (item !== undefined && propertyList.indexOf(item) < 0) {\n propertyList.push(item)\n }\n }\n }\n\n if (space instanceof Number) {\n space = Number(space)\n } else if (space instanceof String) {\n space = String(space)\n }\n\n if (typeof space === 'number') {\n if (space > 0) {\n space = Math.min(10, Math.floor(space))\n gap = ' '.substr(0, space)\n }\n } else if (typeof space === 'string') {\n gap = space.substr(0, 10)\n }\n\n return serializeProperty('', {'': value})\n\n function serializeProperty (key, holder) {\n let value = holder[key]\n if (value != null) {\n if (typeof value.toJSON5 === 'function') {\n value = value.toJSON5(key)\n } else if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n }\n\n if (replacerFunc) {\n value = replacerFunc.call(holder, key, value)\n }\n\n if (value instanceof Number) {\n value = Number(value)\n } else if (value instanceof String) {\n value = String(value)\n } else if (value instanceof Boolean) {\n value = value.valueOf()\n }\n\n switch (value) {\n case null: return 'null'\n case true: return 'true'\n case false: return 'false'\n }\n\n if (typeof value === 'string') {\n return quoteString(value, false)\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'object') {\n return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n }\n\n return undefined\n }\n\n function quoteString (value) {\n const quotes = {\n \"'\": 0.1,\n '\"': 0.2,\n }\n\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n let product = ''\n\n for (let i = 0; i < value.length; i++) {\n const c = value[i]\n switch (c) {\n case \"'\":\n case '\"':\n quotes[c]++\n product += c\n continue\n\n case '\\0':\n if (util.isDigit(value[i + 1])) {\n product += '\\\\x00'\n continue\n }\n }\n\n if (replacements[c]) {\n product += replacements[c]\n continue\n }\n\n if (c < ' ') {\n let hexString = c.charCodeAt(0).toString(16)\n product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n continue\n }\n\n product += c\n }\n\n const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n return quoteChar + product + quoteChar\n }\n\n function serializeObject (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let keys = propertyList || Object.keys(value)\n let partial = []\n for (const key of keys) {\n const propertyString = serializeProperty(key, value)\n if (propertyString !== undefined) {\n let member = serializeKey(key) + ':'\n if (gap !== '') {\n member += ' '\n }\n member += propertyString\n partial.push(member)\n }\n }\n\n let final\n if (partial.length === 0) {\n final = '{}'\n } else {\n let properties\n if (gap === '') {\n properties = partial.join(',')\n final = '{' + properties + '}'\n } else {\n let separator = ',\\n' + indent\n properties = partial.join(separator)\n final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n\n function serializeKey (key) {\n if (key.length === 0) {\n return quoteString(key, true)\n }\n\n const firstChar = String.fromCodePoint(key.codePointAt(0))\n if (!util.isIdStartChar(firstChar)) {\n return quoteString(key, true)\n }\n\n for (let i = firstChar.length; i < key.length; i++) {\n if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n return quoteString(key, true)\n }\n }\n\n return key\n }\n\n function serializeArray (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let partial = []\n for (let i = 0; i < value.length; i++) {\n const propertyString = serializeProperty(String(i), value)\n partial.push((propertyString !== undefined) ? propertyString : 'null')\n }\n\n let final\n if (partial.length === 0) {\n final = '[]'\n } else {\n if (gap === '') {\n let properties = partial.join(',')\n final = '[' + properties + ']'\n } else {\n let separator = ',\\n' + indent\n let properties = partial.join(separator)\n final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n parse,\n stringify,\n}\n\nmodule.exports = JSON5\n", "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", "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 { 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", "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", "export * from \"./lib/ansi\";\nexport * from \"./lib/paths\";\nexport * from \"./lib/stacks\";\nexport * from \"./lib/bars\";\nexport * from \"./lib/table\";\nexport * from \"./lib/args\";\nexport * from \"./lib/discovery\";\nexport * from \"./lib/coverage-core\";\nexport * from \"./lib/coverage-print\";\nexport * from \"./lib/jest-bridge\";\nexport * from \"./lib/program\";\nexport * from \"./lib/path-resolver\";\n", "/* eslint-disable no-continue */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { DEFAULT_EXCLUDE } from \"./args\";\nimport {\n cachedRelated,\n findRelatedTestsFast,\n DEFAULT_TEST_GLOBS,\n} from \"./fast-related\";\nimport { selectDirectTestsForProduction } from \"./graph-distance\";\n\nexport async function findRepoRoot(): Promise<string> {\n let workingDirectory = process.cwd();\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await fs.stat(path.join(workingDirectory, \".git\"));\n return workingDirectory;\n } catch {\n const parentDirectory = path.dirname(workingDirectory);\n if (parentDirectory === workingDirectory) {\n return process.cwd();\n }\n workingDirectory = parentDirectory;\n }\n }\n}\n\nexport const WATCH_FLAGS = new Set([\"--watch\", \"-w\", \"--watchAll\"]);\n\nexport const argsForDiscovery = (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[]\n) => {\n const COVERAGE_PREFIXES = [\n \"--coverage\",\n \"--coverageReporters\",\n \"--coverageDirectory\",\n \"--coverage.reporter\",\n \"--coverage.reportsDirectory\",\n ] as const;\n const strip = (args: readonly string[]) => {\n const out: string[] = [];\n for (let i = 0; i < args.length; i += 1) {\n const token = args[i]!;\n if (token === \"run\") {\n continue;\n }\n if (WATCH_FLAGS.has(token)) {\n continue;\n }\n const isCoverage =\n COVERAGE_PREFIXES.some(\n (prefix) => token === prefix || token.startsWith(`${prefix}=`)\n ) ||\n (COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length &&\n !String(args[i + 1]).startsWith(\"-\"));\n if (isCoverage) {\n if (\n COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length\n ) {\n i += 1;\n }\n continue;\n }\n out.push(token);\n }\n return out;\n };\n const base = strip(jestArgs);\n const withNoWatchman = base.includes(\"--no-watchman\")\n ? base\n : [...base, \"--no-watchman\"];\n return { vitest: [], jest: withNoWatchman };\n};\n\nexport type FilesObject = { readonly files: readonly string[] };\nexport const isFilesObject = (candidate: unknown): candidate is FilesObject =>\n typeof candidate === \"object\" && candidate !== null && \"files\" in candidate;\n\nexport async function discoverJest(\n jestArgs: readonly string[],\n opts?: {\n readonly relatedPaths?: readonly string[];\n readonly patterns?: readonly string[];\n readonly cwd?: string;\n }\n): Promise<string[]> {\n const hasRelated = Boolean(\n opts?.relatedPaths && opts.relatedPaths.length > 0\n );\n const hasPatterns = Boolean(opts?.patterns && opts.patterns.length > 0);\n // Always include --listTests so stdout is a file list, even when using --findRelatedTests\n const listArgs = [\n ...jestArgs,\n \"--listTests\",\n ...(hasRelated ? ([\"--findRelatedTests\"] as const) : ([] as const)),\n ...(hasRelated\n ? (opts!.relatedPaths as readonly string[]) ?? []\n : ([] as const)),\n ...(hasPatterns\n ? (opts!.patterns as readonly string[]) ?? []\n : ([] as const)),\n ];\n const babelNodeBin = \"./node_modules/.bin/babel-node\";\n const jestBin = \"./node_modules/.bin/jest\";\n const raw = await runText(\n babelNodeBin,\n [\"--extensions\", \".js,.ts\", jestBin, ...listArgs],\n {\n cwd: opts?.cwd ?? process.cwd(),\n env: safeEnv(process.env, {\n CI: \"1\",\n NODE_ENV: \"test\",\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 20000,\n }\n );\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nexport const discoverJestResilient = async (\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<readonly string[]> => {\n try {\n return await discoverJest(jestArgs, opts);\n } catch (err) {\n const msg = String((err as Error)?.message ?? err);\n if (!msg.includes(\"timed out\")) {\n throw err;\n }\n const repoRoot = opts?.cwd ?? (await findRepoRoot());\n const related = opts?.relatedPaths ?? [];\n if (related.length === 0) {\n console.warn(\n \"Jest list timed out and no related production paths were provided; falling back to empty Jest set.\"\n );\n return [] as string[];\n }\n console.warn(\n `Jest list timed out; falling back to ripgrep-based related test discovery for ${related.length} prod path(s).`\n );\n const selectionKey = related\n .map((abs) => path.relative(repoRoot, abs).replace(/\\\\/g, \"/\"))\n .sort()\n .join(\"|\");\n const rgMatches = await cachedRelated({\n repoRoot,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot,\n productionPaths: related,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n const toAbsolutePosix = (candidatePath: string) => {\n const isAbs = path.isAbsolute(candidatePath);\n const absJoined = isAbs\n ? candidatePath\n : path.join(repoRoot, candidatePath);\n return absJoined.replace(/\\\\/g, \"/\");\n };\n const jestCandidates = rgMatches\n .filter((candidatePath) => !/\\.d\\.ts$/.test(candidatePath))\n .map(toAbsolutePosix);\n if (jestCandidates.length === 0) {\n console.info(\"Fallback produced 0 Jest candidates.\");\n } else {\n console.info(\n `Fallback produced ${jestCandidates.length} Jest candidate(s).`\n );\n }\n return jestCandidates as readonly string[];\n }\n};\n\nexport const discoverTargets = async (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<{\n readonly vitestFiles: readonly string[];\n readonly jestFiles: readonly string[];\n}> => {\n const related = opts?.relatedPaths ?? [];\n const cwd = opts?.cwd;\n // If production paths were provided, select tests that directly import them (Group 1)\n if (related.length > 0) {\n const repoRoot = cwd ?? (await findRepoRoot());\n // List all jest tests under config\n let allTests: readonly string[] = [];\n try {\n allTests = await discoverJest(jestArgs, { cwd: repoRoot });\n } catch {\n allTests = [];\n }\n if (allTests.length > 0) {\n const direct = await selectDirectTestsForProduction({\n rootDir: repoRoot,\n testFiles: allTests,\n productionFiles: related,\n });\n console.debug(\n `Direct-related jest tests: ${direct.length} (from ${allTests.length} total)`\n );\n return { vitestFiles: [] as string[], jestFiles: direct };\n }\n }\n const jestOpts = {\n relatedPaths: related,\n ...(cwd !== undefined ? { cwd } : {}),\n } as const;\n const [jestFiles] = await Promise.all([\n discoverJestResilient(jestArgs, jestOpts),\n ]);\n console.debug(`Discovery \u2192 jest: ${jestFiles.length}`);\n return { vitestFiles: [] as string[], jestFiles };\n};\n\nexport const filterCandidatesForProject = async (\n cfgPath: string,\n jestArgs: readonly string[],\n candidates: readonly string[],\n cwd: string\n): Promise<readonly string[]> => {\n if (candidates.length === 0) {\n return [] as const;\n }\n // Use --listTests with relative file patterns only; avoid --findRelatedTests here\n const toPosixNormalized = (inputPath: string) =>\n inputPath.replace(/\\\\/g, \"/\");\n const relativePatterns = candidates\n .map((absOrRel) =>\n path.isAbsolute(absOrRel) ? path.relative(cwd, absOrRel) : absOrRel\n )\n .map(toPosixNormalized);\n\n console.log(\"relativePatterns:\", relativePatterns);\n let attemptPatterns: string[] = [];\n try {\n attemptPatterns = await discoverJest([...jestArgs, \"--config\", cfgPath], {\n patterns: relativePatterns,\n cwd,\n });\n } catch {\n attemptPatterns = [];\n }\n const normalizedAttemptPatterns = attemptPatterns.map((candidatePath) =>\n toPosixNormalized(candidatePath)\n );\n if (normalizedAttemptPatterns.length > 0) {\n return normalizedAttemptPatterns as readonly string[];\n }\n // Fallback: if Jest couldn't list,\n // pass the relative patterns as absolute paths for '--runTestsByPath'\n const absoluteFromRelative = relativePatterns.map((rel) =>\n toPosixNormalized(path.join(cwd, rel))\n );\n return absoluteFromRelative as readonly string[];\n};\n\nexport const decideShouldRunJest = (\n vitestFiles: readonly string[],\n jestFiles: readonly string[],\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n }\n) => {\n const MAX_JEST_FILES = 200;\n const total = vitestFiles.length + jestFiles.length;\n const share = total > 0 ? jestFiles.length / total : 0;\n const looksLikeTestPath = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n const looksLikePath = (pathText: string) =>\n /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText);\n const anyTestSelected = (opts.selectionPaths ?? []).some(looksLikeTestPath);\n const anyPathSelected = (opts.selectionPaths ?? []).some(looksLikePath);\n if (!opts.selectionSpecified) {\n return { shouldRunJest: false, share, reason: \"broad_run_guard\" } as const;\n }\n if (jestFiles.length === 0) {\n return { shouldRunJest: false, share, reason: \"no_jest_tests\" } as const;\n }\n if (vitestFiles.length === 0) {\n return jestFiles.length > MAX_JEST_FILES\n ? ({\n shouldRunJest: false,\n share: 1,\n reason: \"full_suite_guard\",\n } as const)\n : ({ shouldRunJest: true, share: 1, reason: \"only_jest\" } as const);\n }\n const threshold = anyTestSelected ? 0.7 : 0.8;\n if (jestFiles.length > MAX_JEST_FILES) {\n return { shouldRunJest: false, share, reason: \"full_suite_guard\" } as const;\n }\n if (!anyPathSelected) {\n return share >= 0.85\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n }\n return share >= threshold\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n};\n", "import * as path from \"node:path\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\n\nexport type ImportSpecExtractor = (\n absPath: string\n) => Promise<readonly string[]>;\n\n// Regex patterns for ripgrep (kept as raw templates to preserve backslashes)\nconst RG_IMPORT_FROM = String.raw`import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"]`;\nconst RG_REQUIRE = String.raw`require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)`;\nconst RG_EXPORT_FROM = String.raw`export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"]`;\n\nexport const extractImportSpecs: ImportSpecExtractor = async (absPath) => {\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n RG_IMPORT_FROM,\n \"-e\",\n RG_REQUIRE,\n \"-e\",\n RG_EXPORT_FROM,\n absPath,\n ];\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n};\n\nexport const isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Return tests that directly import any of the production files (distance 1).\nexport const selectDirectTestsForProduction = async (opts: {\n readonly rootDir: string;\n readonly testFiles: readonly string[];\n readonly productionFiles: readonly string[];\n}): Promise<readonly string[]> => {\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const prodSet = new Set(\n opts.productionFiles.map((prodPath) =>\n path.resolve(prodPath).replace(/\\\\/g, \"/\")\n )\n );\n const out: string[] = [];\n for (const testAbsRaw of opts.testFiles) {\n const testAbs = path.resolve(testAbsRaw).replace(/\\\\/g, \"/\");\n let specs: readonly string[] = [];\n const cached = specsCache.get(testAbs);\n if (cached !== undefined) {\n specs = cached;\n } else {\n // eslint-disable-next-line no-await-in-loop\n specs = await extractImportSpecs(testAbs);\n specsCache.set(testAbs, specs);\n }\n let direct = false;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n testAbs,\n spec,\n opts.rootDir,\n resolutionCache\n );\n if (resolved && prodSet.has(resolved)) {\n direct = true;\n break;\n }\n }\n if (direct) {\n out.push(testAbs);\n }\n }\n return out;\n};\n", "import * as path from 'node:path';\nimport * as fsSync from 'node:fs';\n\nconst INDEX_NOT_FOUND = -1;\nconst ZERO = 0;\nconst ONE = 1;\n\ntype TsLikePathsConfig = {\n readonly configDir: string;\n readonly baseUrl?: string;\n readonly paths?: Record<string, readonly string[]>;\n};\n\ntype JestAliasConfig = {\n readonly configDir: string;\n readonly mappers: ReadonlyArray<{ pattern: RegExp; target: string }>;\n readonly moduleDirs: ReadonlyArray<string>;\n};\n\ntype BabelAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n readonly roots: ReadonlyArray<string>;\n readonly extensions: ReadonlyArray<string>;\n};\n\ntype ModuleResolverOptions = {\n alias?: Record<string, string>;\n root?: readonly string[];\n extensions?: readonly string[];\n};\n\ntype MetroAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n};\n\nconst tsConfigLookupCache = new Map<string, TsLikePathsConfig | null>();\nconst jestConfigLookupCache = new Map<string, JestAliasConfig | null>();\nconst babelConfigLookupCache = new Map<string, BabelAliasConfig | null>();\nconst metroConfigLookupCache = new Map<string, MetroAliasConfig | null>();\n\nconst FILE_EXTS = [\n '',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.mts',\n '.cts',\n '.json',\n] as const;\n\nexport const tryResolveFile = (candidateBase: string): string | undefined => {\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n try {\n const stat = fsSync.statSync(full);\n if (stat.isFile()) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n } catch {\n // ignore\n }\n }\n }\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n }\n return undefined;\n};\n\nconst JEST_CONFIG_FILENAMES = [\n 'jest.config.js',\n 'jest.config.cjs',\n 'jest.config.mjs',\n 'jest.config.ts',\n 'jest.config.cts',\n];\n\nconst loadNearestJestConfig = (startDir: string, rootDir: string): JestAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = jestConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of JEST_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const mappers: Array<{ pattern: RegExp; target: string }> = [];\n const moduleDirs: string[] = [];\n const mapperBlockMatch = raw.match(/moduleNameMapper\\s*:\\s*\\{([\\s\\S]*?)\\}/m);\n if (mapperBlockMatch) {\n const [, body = ''] = mapperBlockMatch;\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*[\"']([^\"']+)[\"']/g;\n let matchResult: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((matchResult = pairRe.exec(body))) {\n const [, patternSrcRaw, targetRaw] = matchResult as unknown as [string, string, string];\n if (patternSrcRaw && targetRaw) {\n try {\n const pattern = new RegExp(patternSrcRaw);\n mappers.push({ pattern, target: targetRaw });\n } catch {\n // ignore invalid regex entries\n }\n }\n }\n }\n const dirsMatch = raw.match(/moduleDirectories\\s*:\\s*\\[([^\\]]*?)\\]/m);\n if (dirsMatch) {\n const [, arr = ''] = dirsMatch;\n const strRe = /[\"']([^\"']+)[\"']/g;\n let dirMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((dirMatch = strRe.exec(arr))) {\n const [, capturedDirRaw] = dirMatch as unknown as [string, string];\n if (capturedDirRaw && capturedDirRaw.length > ZERO) {\n moduleDirs.push(capturedDirRaw);\n }\n }\n }\n const cfg: JestAliasConfig = {\n configDir: path.dirname(filePath),\n mappers,\n moduleDirs,\n };\n jestConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n jestConfigLookupCache.set(cur, null);\n return null;\n }\n }\n jestConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyJestMappings = (spec: string, cfg: JestAliasConfig): string | undefined => {\n for (const mapping of cfg.mappers) {\n const { pattern, target } = mapping;\n if (pattern.test(spec)) {\n const replacedRoot = target.replace(/<rootDir>/g, cfg.configDir);\n const candidate = spec.replace(pattern, replacedRoot);\n const res = tryResolveFile(candidate);\n if (res) {\n return res;\n }\n }\n }\n for (const dir of cfg.moduleDirs) {\n if (dir !== 'node_modules') {\n const base = path.isAbsolute(dir) ? dir : path.resolve(cfg.configDir, dir);\n const res = tryResolveFile(path.join(base, spec));\n if (res) {\n return res;\n }\n }\n }\n return undefined;\n};\n\nconst BABEL_CONFIG_FILENAMES = [\n '.babelrc',\n '.babelrc.json',\n 'babel.config.js',\n 'babel.config.cjs',\n 'babel.config.mjs',\n 'babel.config.ts',\n 'babel.config.cts',\n];\n\nconst MODULE_RESOLVER_NAMES = new Set([\n 'module-resolver',\n 'babel-plugin-module-resolver',\n '@babel/plugin-module-resolver',\n]);\n\nconst loadNearestBabelConfig = (startDir: string, rootDir: string): BabelAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = babelConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const name of BABEL_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, name);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n let aliases: Record<string, string> = {};\n const roots: string[] = [];\n const extensions: string[] = [];\n if (filePath.endsWith('.json') || path.basename(filePath) === '.babelrc') {\n try {\n const json = JSON.parse(raw) as { plugins?: unknown };\n const plugins = (json.plugins as unknown[]) || [];\n for (const pluginEntry of plugins) {\n if (Array.isArray(pluginEntry)) {\n const [pluginNameRaw, pluginOptionsRaw] = pluginEntry as [unknown, unknown];\n if (typeof pluginNameRaw === 'string' && MODULE_RESOLVER_NAMES.has(pluginNameRaw)) {\n const opts: ModuleResolverOptions =\n (pluginOptionsRaw as ModuleResolverOptions) || {};\n if (opts.alias && typeof opts.alias === 'object') {\n aliases = { ...aliases, ...opts.alias };\n }\n const rootArr = Array.isArray(opts.root) ? opts.root : [];\n for (const rootEntry of rootArr) {\n if (typeof rootEntry === 'string') {\n roots.push(rootEntry);\n }\n }\n const extArr = Array.isArray(opts.extensions) ? opts.extensions : [];\n for (const extEntry of extArr) {\n if (typeof extEntry === 'string') {\n extensions.push(extEntry);\n }\n }\n }\n }\n }\n } catch {\n // ignore JSON parse\n }\n }\n const cfg: BabelAliasConfig = {\n configDir: path.dirname(filePath),\n aliases,\n roots,\n extensions,\n };\n babelConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n babelConfigLookupCache.set(cur, null);\n return null;\n }\n }\n babelConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyBabelMappings = (spec: string, cfg: BabelAliasConfig): string | undefined => {\n const keys = Object.keys(cfg.aliases);\n let best: string | undefined;\n for (const key of keys) {\n if (matchPathKey(spec, key)) {\n if (!best || key.length > best.length) {\n best = key;\n }\n }\n }\n if (!best) {\n return undefined;\n }\n const replaced = replacePathKey(spec, best);\n const targetTmpl = cfg.aliases[best] ?? '';\n const targetPath = targetTmpl.includes('*') ? targetTmpl.replace('*', replaced) : targetTmpl;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n if (!targetTmpl.includes('*') && replaced) {\n const joined = path.join(abs, replaced);\n const r2 = tryResolveFile(joined);\n if (r2) {\n return r2;\n }\n }\n for (const rootBase of cfg.roots) {\n const base = path.isAbsolute(rootBase) ? rootBase : path.resolve(cfg.configDir, rootBase);\n const r3 = tryResolveFile(path.join(base, spec));\n if (r3) {\n return r3;\n }\n }\n return undefined;\n};\n\nconst METRO_CONFIG_FILENAMES = ['metro.config.js', 'metro.config.cjs', 'metro.config.mjs'];\n\nconst loadNearestMetroConfig = (startDir: string, rootDir: string): MetroAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = metroConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of METRO_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const varMap = new Map<string, string>();\n varMap.set('__dirname', path.dirname(filePath));\n const projectRootMatch = raw.match(/const\\s+projectRoot\\s*=\\s*__dirname\\s*;/);\n if (projectRootMatch) {\n varMap.set('projectRoot', path.dirname(filePath));\n }\n const workspaceRootMatch = raw.match(\n /const\\s+workspaceRoot\\s*=\\s*path\\.resolve\\(\\s*projectRoot\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (workspaceRootMatch) {\n const [, rel = ''] = workspaceRootMatch;\n const base = varMap.get('projectRoot') ?? path.dirname(filePath);\n if (rel) {\n varMap.set('workspaceRoot', path.resolve(base, rel));\n }\n }\n const extraMatch = raw.match(/extraNodeModules\\s*=\\s*\\{([\\s\\S]*?)\\}/m);\n const aliases: Record<string, string> = {};\n if (extraMatch) {\n const body = extraMatch[1] ?? '';\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*([^,]+),?/g;\n let pairMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((pairMatch = pairRe.exec(body))) {\n const [, aliasKeyRaw, rhsRaw] = pairMatch as unknown as [string, string, string];\n const aliasKey = aliasKeyRaw ?? '';\n const rhs = (rhsRaw ?? '').trim();\n let resolved: string | undefined;\n const strMatch = rhs.match(/^[\"']([^\"']+)[\"']$/);\n if (strMatch && strMatch[1]) {\n const strVal = strMatch[1] as string;\n resolved = path.isAbsolute(strVal)\n ? strVal\n : path.resolve(path.dirname(filePath), strVal);\n } else {\n const resMatch = rhs.match(\n /path\\.resolve\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (resMatch && resMatch[1] && resMatch[2]) {\n const varName = resMatch[1] as string;\n const segment = resMatch[2] as string;\n const base = varMap.get(varName) ?? path.dirname(filePath);\n resolved = path.resolve(base, segment);\n }\n }\n if (aliasKey && resolved) {\n aliases[aliasKey] = resolved;\n }\n }\n }\n const cfg: MetroAliasConfig = { configDir: path.dirname(filePath), aliases };\n metroConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n metroConfigLookupCache.set(cur, null);\n return null;\n }\n }\n metroConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyMetroMappings = (spec: string, cfg: MetroAliasConfig): string | undefined => {\n const entries = Object.entries(cfg.aliases);\n let bestKey: string | undefined;\n for (const [alias] of entries) {\n if (spec === alias || spec.startsWith(`${alias}/`)) {\n if (!bestKey || alias.length > bestKey.length) {\n bestKey = alias;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const sureKey = bestKey as string;\n const base = cfg.aliases[sureKey] ?? '';\n if (!base) {\n return undefined;\n }\n const remainder = spec === sureKey ? '' : spec.slice(sureKey.length + 1);\n const candidate = remainder ? path.join(base, remainder) : base;\n const res = tryResolveFile(candidate);\n return res;\n};\n\nconst loadNearestTsOrJsConfig = (startDir: string, rootDir: string): TsLikePathsConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = tsConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n const tsPath = path.join(cur, 'tsconfig.json');\n const jsPath = path.join(cur, 'jsconfig.json');\n if (fsSync.existsSync(tsPath) || fsSync.existsSync(jsPath)) {\n const filePath = fsSync.existsSync(tsPath) ? tsPath : jsPath;\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const json = JSON.parse(raw) as unknown;\n const compilerOptionsRaw = (json as { compilerOptions?: unknown }).compilerOptions ?? {};\n const { baseUrl: baseUrlRaw, paths } = compilerOptionsRaw as {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n const baseUrl = baseUrlRaw ? path.resolve(cur, baseUrlRaw) : undefined;\n const cfg: TsLikePathsConfig = {\n configDir: cur,\n ...(baseUrl ? { baseUrl } : {}),\n ...(paths ? { paths } : {}),\n };\n tsConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n tsConfigLookupCache.set(cur, null);\n return null;\n }\n }\n tsConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyPathsMapping = (spec: string, cfg: TsLikePathsConfig): string | undefined => {\n const map = cfg.paths;\n if (!map) {\n return undefined;\n }\n let bestKey: string | undefined;\n for (const key of Object.keys(map)) {\n if (matchPathKey(spec, key)) {\n if (!bestKey || key.length > bestKey.length) {\n bestKey = key;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const targets = map[bestKey] ?? [];\n const replaced = replacePathKey(spec, bestKey);\n for (const target of targets) {\n const targetPath = target.includes('*') ? target.replace('*', replaced) : target;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n }\n return undefined;\n};\n\nfunction matchPathKey(spec: string, key: string): boolean {\n if (key === spec) {\n return true;\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return false;\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.startsWith(prefix) && spec.endsWith(suffix);\n}\n\nfunction replacePathKey(spec: string, key: string): string {\n if (key === spec) {\n return '';\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return '';\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.slice(prefix.length, spec.length - suffix.length);\n}\n\nfunction resolveWithAliases(fromFile: string, spec: string, rootDir: string): string | undefined {\n const startDir = path.dirname(fromFile);\n let cur: string | undefined = startDir;\n while (cur && cur.startsWith(rootDir)) {\n const tsCfg = loadNearestTsOrJsConfig(cur, rootDir);\n if (tsCfg) {\n const viaPaths = applyPathsMapping(spec, tsCfg);\n if (viaPaths) {\n return viaPaths;\n }\n if (tsCfg.baseUrl) {\n const viaBase = tryResolveFile(path.join(tsCfg.baseUrl, spec));\n if (viaBase) {\n return viaBase;\n }\n }\n }\n const babelCfg = loadNearestBabelConfig(cur, rootDir);\n if (babelCfg) {\n const viaBabel = applyBabelMappings(spec, babelCfg);\n if (viaBabel) {\n return viaBabel;\n }\n }\n const jestCfg = loadNearestJestConfig(cur, rootDir);\n if (jestCfg) {\n const viaJest = applyJestMappings(spec, jestCfg);\n if (viaJest) {\n return viaJest;\n }\n }\n const metroCfg = loadNearestMetroConfig(cur, rootDir);\n if (metroCfg) {\n const viaMetro = applyMetroMappings(spec, metroCfg);\n if (viaMetro) {\n return viaMetro;\n }\n }\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return undefined;\n}\n\nexport const resolveImportWithRoot = (\n fromFile: string,\n spec: string,\n rootDir: string,\n cache: Map<string, string | undefined>,\n): string | undefined => {\n const key = `${fromFile}|${spec}`;\n const cached = cache.get(key);\n if (cached !== undefined) {\n return cached;\n }\n let resolved: string | undefined;\n const baseDir = path.dirname(fromFile);\n const isProjectAbs = spec.startsWith('/');\n const candidateBase = isProjectAbs\n ? path.join(rootDir, spec.slice(ONE))\n : path.resolve(baseDir, spec);\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n if (!resolved) {\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n }\n if (!resolved && !spec.startsWith('.') && !spec.startsWith('/')) {\n resolved = resolveWithAliases(fromFile, spec, rootDir);\n }\n cache.set(key, resolved);\n return resolved;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as fs from 'node:fs/promises';\nimport { createRequire } from 'node:module';\n\nimport { relativizeForMatch } from './paths';\n\nconst require = createRequire(import.meta.url);\n\nconst { createCoverageMap } =\n // eslint-disable-next-line import/no-extraneous-dependencies\n require('istanbul-lib-coverage') as typeof import('istanbul-lib-coverage');\n\nexport const readCoverageJson = async (jsonPath: string) => {\n try {\n const txt = await fs.readFile(jsonPath, 'utf8');\n if (txt.trim().length === 0) {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n const raw = JSON.parse(txt) as unknown;\n return (raw ?? {}) as import('istanbul-lib-coverage').CoverageMapData;\n } catch {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n};\n\nexport const filterCoverageMap = (\n map: import('istanbul-lib-coverage').CoverageMap,\n opts: {\n readonly includes: readonly string[];\n readonly excludes: readonly string[];\n readonly root: string;\n readonly selectionSpecified: boolean;\n },\n) => {\n // local picomatch import to avoid circulars\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const picomatchFn = require('picomatch') as unknown as (\n globs: string | readonly string[],\n options?: { readonly nocase?: boolean; readonly dot?: boolean },\n ) => (str: string) => boolean;\n const makeMatcher = (globs: readonly string[]) =>\n globs.length === 0 ? () => true : picomatchFn(globs as string[], { dot: true, nocase: true });\n\n const includeMatch = makeMatcher(opts.includes.length ? opts.includes : ['**/*']);\n const excludeMatch = makeMatcher(opts.excludes);\n const out = createCoverageMap({});\n\n for (const absFile of map.files()) {\n const rel = relativizeForMatch(absFile, opts.root);\n const summary = map.fileCoverageFor(absFile).toSummary();\n\n const executed =\n summary.statements.covered > 0 ||\n summary.functions.covered > 0 ||\n summary.branches.covered > 0 ||\n summary.lines.covered > 0;\n\n if (executed) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n } else {\n const inc = includeMatch(rel);\n let exc = excludeMatch(rel);\n if (opts.selectionSpecified) {\n exc = /\\b(node_modules|coverage|dist|build)\\b/.test(rel) && exc;\n }\n if (inc && !exc) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n }\n }\n }\n return out;\n};\n\nexport const computeUncoveredBlocks = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly start: number; readonly end: number }> => {\n const stmtHitsById = file.data.s as Record<string, number>;\n const sm = file.data.statementMap as Record<\n string,\n { start: { line: number }; end: { line: number } }\n >;\n const missed = new Set<number>();\n for (const statementId of Object.keys(stmtHitsById)) {\n if ((stmtHitsById[statementId] ?? 0) > 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const loc = sm[statementId];\n const from = Math.max(1, loc?.start.line ?? 0);\n const to = Math.max(from, loc?.end.line ?? 0);\n for (let ln = from; ln <= to; ln += 1) {\n missed.add(ln);\n }\n }\n const lines = Array.from(missed).sort((leftLine, rightLine) => leftLine - rightLine);\n const ranges: { start: number; end: number }[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const start = lines[index]!;\n let end = start;\n while (index + 1 < lines.length && lines[index + 1] === end + 1) {\n index += 1;\n end = lines[index]!;\n }\n ranges.push({ start, end });\n }\n return ranges;\n};\n\nexport const missedBranches = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{\n readonly id: string;\n readonly line: number;\n readonly zeroPaths: readonly number[];\n}> => {\n const branchHitsById = file.data.b as Record<string, number[]>;\n const branchMap = file.data.branchMap as Record<string, { line: number }>;\n const out: { id: string; line: number; zeroPaths: number[] }[] = [];\n for (const id of Object.keys(branchHitsById)) {\n const hitsArray = branchHitsById[id] ?? [];\n const zeros: number[] = [];\n hitsArray.forEach((hits, index) => {\n if (hits === 0) {\n zeros.push(index);\n }\n });\n if (zeros.length) {\n out.push({ id, line: branchMap[id]?.line ?? 0, zeroPaths: zeros });\n }\n }\n return out.sort((firstBranch, secondBranch) => firstBranch.line - secondBranch.line);\n};\n\nexport const missedFunctions = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly name: string; readonly line: number }> => {\n const functionHitCounts = file.data.f as Record<string, number>;\n const functionMap = file.data.fnMap as Record<string, { name: string; line: number }>;\n const out: { name: string; line: number }[] = [];\n for (const id of Object.keys(functionHitCounts)) {\n if ((functionHitCounts[id] ?? 0) === 0) {\n const meta = functionMap[id];\n out.push({ name: meta?.name ?? '(anonymous)', line: meta?.line ?? 0 });\n }\n }\n return out.sort((firstFunction, secondFunction) => firstFunction.line - secondFunction.line);\n};\n\nconst clamp = (value: number, lowerBound: number, upperBound: number) =>\n Math.max(lowerBound, Math.min(upperBound, value));\n\nexport const renderCodeFrame = (\n source: string,\n miss: { readonly start: number; readonly end: number },\n context = 3,\n): string => {\n const lines = source.split(/\\r?\\n/);\n const from = clamp(miss.start - context, 1, lines.length);\n const to = clamp(miss.end + context, 1, lines.length);\n const out: string[] = [];\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? '';\n const tag =\n ln >= miss.start && ln <= miss.end\n ? `> ${ln.toString().padStart(4)}|`\n : ` ${ln.toString().padStart(4)}|`;\n out.push(`${tag} ${body}`);\n }\n return out.join('\\n');\n};\n\nexport const compositeBarPct = (\n summary: import('istanbul-lib-coverage').CoverageSummary,\n hotspots: ReadonlyArray<{ readonly start: number; readonly end: number }>,\n): number => {\n const base = Math.min(\n Number.isFinite(summary.lines.pct) ? (summary.lines.pct as number) : 0,\n Number.isFinite(summary.functions.pct) ? (summary.functions.pct as number) : 0,\n Number.isFinite(summary.branches.pct) ? (summary.branches.pct as number) : 0,\n );\n const totalLines = (summary.lines.total ?? 0) as number;\n let penalty = 0;\n if (totalLines > 0 && hotspots.length > 0) {\n const largestRange = Math.max(...hotspots.map((range) => range.end - range.start + 1));\n const concentration = largestRange / totalLines;\n penalty = Math.min(15, Math.round(concentration * 100 * 0.5));\n }\n return Math.max(0, Math.min(100, base - penalty));\n};\n", "import * as path from \"node:path\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\nimport { ansi } from \"./ansi\";\nimport { tintPct } from \"./bars\";\nimport { barCell, ColumnSpec, Cell, cell, renderTable } from \"./table\";\nimport { preferredEditorHref, linkifyPadded } from \"./paths\";\nimport {\n compositeBarPct,\n computeUncoveredBlocks,\n missedBranches,\n missedFunctions,\n} from \"./coverage-core\";\n\nexport const printDetailedCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly limitPerFile: number | \"all\";\n readonly showCode: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const files = opts.map.files().sort((fileA, fileB) => {\n const summaryA = opts.map.fileCoverageFor(fileA).toSummary();\n const summaryB = opts.map.fileCoverageFor(fileB).toSummary();\n return summaryA.lines.pct - summaryB.lines.pct;\n });\n for (const abs of files) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const blocks = computeUncoveredBlocks(fc);\n const misses = missedBranches(fc);\n const missFns = missedFunctions(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const max =\n opts.limitPerFile === \"all\"\n ? Number.POSITIVE_INFINITY\n : opts.limitPerFile ?? 5;\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const topBlocks = blocks\n .slice()\n .sort(compareRangesByLengthDescThenStart)\n .slice(0, max);\n if (topBlocks.length === 0 && misses.length === 0 && missFns.length === 0) {\n console.info(ansi.dim(\" No uncovered hotspots.\"));\n console.info(\"\");\n // eslint-disable-next-line no-continue\n continue;\n }\n let src = \"\";\n if (opts.showCode && topBlocks.length > 0) {\n try {\n src = fsSync.readFileSync(abs, \"utf8\");\n } catch {\n src = \"\";\n }\n }\n for (const block of topBlocks) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n block.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${block.start}\\u001B]8;;\\u0007`;\n const label = ` ${ansi.yellow(`L${block.start}`)}\u2013${ansi.yellow(\n `L${block.end}`\n )} ${link}`;\n console.info(label);\n if (opts.showCode && src.length) {\n const lines = src.split(/\\r?\\n/);\n const from = Math.max(1, block.start - 3);\n const to = Math.min(lines.length, block.end + 3);\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? \"\";\n const tag =\n ln >= block.start && ln <= block.end\n ? ansi.red(`>${ln.toString().padStart(4)}|`)\n : ansi.dim(` ${ln.toString().padStart(4)}|`);\n console.info(`${tag} ${body}`);\n }\n }\n }\n if (missFns.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of missFns) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`;\n console.info(` - ${fn.name} @ ${link}`);\n }\n }\n if (misses.length) {\n console.info(ansi.bold(\" Branch paths with zero hits:\"));\n for (const br of misses) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`;\n console.info(\n ` - branch#${br.id} @ ${link} missed paths: [${br.zeroPaths.join(\n \", \"\n )}]`\n );\n }\n }\n console.info(\"\");\n }\n};\n\nexport const printCompactCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly maxFiles?: number;\n readonly maxHotspots?: number;\n readonly pageFit?: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const terminalRows =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const reservedRows = 8;\n const availableRows = Math.max(10, terminalRows - reservedRows);\n const maxHotspotsDerived = opts.pageFit\n ? Math.max(3, Math.floor(availableRows * 0.5))\n : opts.maxHotspots ?? 8;\n const maxFunctionsDerived = opts.pageFit\n ? Math.max(2, Math.floor(availableRows * 0.25))\n : 6;\n const maxBranchesDerived = opts.pageFit\n ? Math.max(2, availableRows - maxHotspotsDerived - maxFunctionsDerived)\n : 6;\n const files = opts.map\n .files()\n .sort(\n (fileA, fileB) =>\n opts.map.fileCoverageFor(fileA).toSummary().lines.pct -\n opts.map.fileCoverageFor(fileB).toSummary().lines.pct\n );\n const fileCap = opts.maxFiles ?? files.length;\n for (const abs of files.slice(0, fileCap)) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const blocks = computeUncoveredBlocks(fc)\n .slice()\n .sort(compareRangesByLengthDescThenStart);\n const missFns = missedFunctions(fc);\n const misses = missedBranches(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const hotspots = blocks.slice(0, maxHotspotsDerived);\n if (hotspots.length) {\n console.info(ansi.bold(\" Hotspots:\"));\n for (const hotspot of hotspots) {\n const len = hotspot.end - hotspot.start + 1;\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n hotspot.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${hotspot.start}\\u001B]8;;\\u0007`;\n console.info(\n ` - L${hotspot.start}\u2013L${hotspot.end} (${len} lines) ${link}`\n );\n }\n }\n const functionsList = missFns.slice(0, maxFunctionsDerived);\n if (functionsList.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of functionsList) {\n console.info(\n ` - ${fn.name} @ \\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const branchesList = misses.slice(0, maxBranchesDerived);\n if (branchesList.length) {\n console.info(ansi.bold(\" Branches with zero-hit paths:\"));\n for (const br of branchesList) {\n console.info(\n ` - L${br.line} branch#${br.id} missed: [${br.zeroPaths.join(\n \", \"\n )}] \\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const restHs = Math.max(0, blocks.length - hotspots.length);\n const restFns = Math.max(0, missFns.length - functionsList.length);\n const restBrs = Math.max(0, misses.length - branchesList.length);\n if (restHs + restFns + restBrs > 0) {\n console.info(\n ansi.dim(\n ` \u2026 truncated: +${restHs} hotspots, +${restFns} funcs, +${restBrs} branches`\n )\n );\n }\n console.info(\"\");\n }\n if (files.length > fileCap) {\n console.info(\n ansi.dim(\n `\u2026 ${\n files.length - fileCap\n } more files omitted (use --coverage.maxFiles or --coverage.mode=full)`\n )\n );\n }\n};\n\n// Shorten a relative path to fit within maxWidth using directory squeezing:\n// keep HEAD dirs, squeeze the MIDDLE as \"\u2026/\", keep TAIL dirs, and always\n// preserve the filename (trimming the stem token-aware as a last resort).\nconst shortenPathPreservingFilename = (\n relPath: string,\n maxWidth: number,\n opts?: {\n readonly keepHead?: number; // soft hint for starting head dirs (default 1)\n readonly keepTail?: number; // soft hint for starting tail dirs (default 1)\n readonly ellipsis?: \"\u2026\" | \"...\"; // default '\u2026'\n readonly minDirChars?: number; // minimum per-dir chars when trimmed (default 1)\n }\n): string => {\n const ellipsis = opts?.ellipsis ?? \"\u2026\";\n const START_HEAD = Math.max(0, opts?.keepHead ?? 1);\n const START_TAIL = Math.max(0, opts?.keepTail ?? 1);\n const MIN_DIR_CHARS = Math.max(1, opts?.minDirChars ?? 2);\n\n if (maxWidth <= 0) {\n return \"\";\n }\n\n const visibleWidth = (text: string): number => [...text].length;\n\n const splitMultiExt = (base: string) => {\n const endings = [\n \".test.ts\",\n \".spec.ts\",\n \".d.ts\",\n \".schema.ts\",\n \".schema.js\",\n \".config.ts\",\n \".config.js\",\n ] as const;\n for (const ending of endings) {\n if (base.endsWith(ending)) {\n return { stem: base.slice(0, -ending.length), ext: ending } as const;\n }\n }\n const ext = path.extname(base);\n return { stem: base.slice(0, -ext.length), ext } as const;\n };\n\n const sliceBalanced = (input: string, width: number): string => {\n if (visibleWidth(input) <= width) {\n return input;\n }\n if (width <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, width);\n }\n const keep = width - visibleWidth(ellipsis);\n const head = Math.ceil(keep / 2);\n const tail = Math.floor(keep / 2);\n return input.slice(0, head) + ellipsis + input.slice(-tail);\n };\n\n const tokenAwareMiddle = (stem: string, budget: number): string => {\n if (budget <= 0) {\n return \"\";\n }\n if (visibleWidth(stem) <= budget) {\n return stem;\n }\n if (budget <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, budget);\n }\n const tokens = stem.split(/([._-])/); // keep separators\n let leftIndex = 0;\n let rightIndex = tokens.length - 1;\n let left = \"\";\n let right = \"\";\n while (leftIndex <= rightIndex) {\n const tryL = left + tokens[leftIndex];\n const tryR = tokens[rightIndex] + right;\n const candL = tryL + ellipsis + right;\n const candR = left + ellipsis + tryR;\n const canL = visibleWidth(candL) <= budget;\n const canR = visibleWidth(candR) <= budget;\n if (canL && (!canR || visibleWidth(candL) >= visibleWidth(candR))) {\n left = tryL;\n leftIndex += 1;\n } else if (canR) {\n right = tryR;\n rightIndex -= 1;\n } else {\n break;\n }\n }\n const glued = left + ellipsis + right;\n if (visibleWidth(glued) < budget - 1) {\n return sliceBalanced(stem, budget);\n }\n return visibleWidth(glued) <= budget ? glued : sliceBalanced(stem, budget);\n };\n\n // Build a candidate label from split parts, collapsing duplicate ellipses\n // and removing any segments that are themselves just an ellipsis string.\n const joinParts = (\n headParts: readonly string[],\n tailParts: readonly string[],\n hideMiddle: boolean,\n baseLabel: string\n ): string => {\n const removeEllipsisSegments = (parts: readonly string[]) =>\n parts.filter((segment) => segment && segment !== ellipsis);\n const headCleaned = removeEllipsisSegments(headParts);\n const tailCleaned = removeEllipsisSegments(tailParts);\n\n const segmentsList: string[] = [];\n if (headCleaned.length) {\n segmentsList.push(headCleaned.join(\"/\"));\n }\n if (hideMiddle) {\n segmentsList.push(ellipsis);\n }\n if (tailCleaned.length) {\n segmentsList.push(tailCleaned.join(\"/\"));\n }\n segmentsList.push(baseLabel);\n\n const squashed: string[] = [];\n for (const segmentText of segmentsList) {\n const previous = squashed[squashed.length - 1];\n const isDuplicateEllipsis =\n segmentText === ellipsis && previous === ellipsis;\n if (!isDuplicateEllipsis) {\n squashed.push(segmentText);\n }\n }\n return squashed.join(\"/\");\n };\n\n // Trim shown directory names to make the candidate fit, token-aware\n const tryTrimDirsToFit = (\n headSrc: readonly string[],\n tailSrc: readonly string[],\n hideMiddle: boolean,\n baseLabel: string,\n max: number\n ): string | null => {\n const headParts = headSrc.map((segment) => segment);\n const tailParts = tailSrc.map((segment) => segment);\n let hidAny = false;\n\n const build = () => {\n const label = joinParts(\n headParts,\n tailParts,\n hideMiddle || hidAny,\n baseLabel\n );\n return { label, width: visibleWidth(label) };\n };\n\n let { label, width } = build();\n if (width <= max) {\n return label;\n }\n\n type Segment = {\n arr: string[];\n idx: number;\n original: string;\n budget: number;\n min: number;\n };\n const segments: Segment[] = [];\n headParts.forEach((part, index) =>\n segments.push({\n arr: headParts,\n idx: index,\n original: headSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n tailParts.forEach((part, index) =>\n segments.push({\n arr: tailParts,\n idx: index,\n original: tailSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n\n let guardCounter = 200;\n while (width > max && guardCounter-- > 0) {\n let best: Segment | undefined;\n let bestSlack = 0;\n for (const seg of segments) {\n const slack = seg.budget - seg.min;\n if (slack > bestSlack) {\n bestSlack = slack;\n best = seg;\n }\n }\n if (!best) {\n break;\n }\n\n const overflow = width - max;\n const reduceBy = Math.min(overflow, best.budget - best.min);\n const nextBudget = Math.max(best.min, best.budget - reduceBy);\n\n // If the segment would shrink below the minimum per-dir chars, hide it.\n if (nextBudget < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n const trimmed = tokenAwareMiddle(best.original, nextBudget);\n if (trimmed === ellipsis || visibleWidth(trimmed) < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n best.arr[best.idx] = trimmed;\n best.budget = visibleWidth(trimmed);\n }\n }\n\n ({ label, width } = build());\n if (width <= max) {\n return label;\n }\n }\n\n return null;\n };\n\n const normalized = relPath.replace(/\\\\/g, \"/\");\n if (visibleWidth(normalized) <= maxWidth) {\n return normalized;\n }\n\n const segs = normalized.split(\"/\");\n const baseName = segs.pop() ?? \"\";\n const { stem, ext } = splitMultiExt(baseName);\n const baseFull = stem + ext;\n\n if (visibleWidth(baseFull) > maxWidth) {\n const stemBudget = Math.max(1, maxWidth - visibleWidth(ext));\n return tokenAwareMiddle(stem, stemBudget) + ext;\n }\n\n if (segs.length === 0) {\n return baseFull;\n }\n\n const total = segs.length;\n let headCount = Math.min(START_HEAD, total);\n let tailCount = Math.min(START_TAIL, Math.max(0, total - headCount));\n if (tailCount === 0 && total > headCount) {\n tailCount = 1;\n }\n\n const buildRaw = (headNum: number, tailNum: number) => {\n const headRaw = segs.slice(0, headNum);\n const tailRaw = segs.slice(total - tailNum);\n const hideMiddle = headNum + tailNum < total;\n return { headRaw, tailRaw, hideMiddle } as const;\n };\n\n let { headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tailCount);\n let candidate = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (!candidate) {\n return baseFull;\n }\n\n while (headCount + tailCount < total) {\n let advanced = false;\n\n if (headCount + tailCount < total) {\n const tryTail = Math.min(tailCount + 1, total - headCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tryTail));\n const candTail = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candTail) {\n tailCount = tryTail;\n candidate = candTail;\n advanced = true;\n }\n }\n\n if (!advanced && headCount + tailCount < total) {\n const tryHead = Math.min(headCount + 1, total - tailCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(tryHead, tailCount));\n const candHead = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candHead) {\n headCount = tryHead;\n candidate = candHead;\n advanced = true;\n }\n }\n\n if (!advanced) {\n break;\n }\n }\n\n if (headCount + tailCount >= total) {\n const full = `${segs.join(\"/\")}/${baseFull}`;\n return visibleWidth(full) <= maxWidth ? full : candidate;\n }\n\n return candidate;\n};\n\nconst isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Extract import/require/export-from specs for one file using ripgrep with timeout.\nconst extractImportSpecs = async (\n absPath: string,\n cache: Map<string, readonly string[]>\n): Promise<readonly string[]> => {\n const cached = cache.get(absPath);\n if (cached) {\n return cached;\n }\n\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n \"import\\\\s+[^'\\\"\\n]*from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\",\n \"-e\",\n \"require\\\\(\\\\s*['\\\"]([^'\\\"]+)['\\\"]\\\\s*\\\\)\",\n \"-e\",\n \"export\\\\s+(?:\\\\*|\\\\{[^}]*\\\\})\\\\s*from\\\\s*['\\\"]([^'\\\"]+)['\\\"]\",\n absPath,\n ];\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n\n const out = raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .filter((spec) => spec.startsWith(\".\") || spec.startsWith(\"/\"));\n\n cache.set(absPath, out);\n return out;\n};\n\n// Build minimal import-graph distance map from a set of executed tests.\nconst buildDistanceMapFromTests = async (\n executedTestsAbs: readonly string[],\n rootDir: string\n): Promise<Map<string, number>> => {\n const dist = new Map<string, number>();\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const queue: Array<[string, number]> = [];\n const seen = new Set<string>();\n\n for (const testAbs of executedTestsAbs) {\n const testPathNormalized = path.resolve(testAbs).replace(/\\\\/g, \"/\");\n dist.set(testPathNormalized, 0);\n queue.push([testPathNormalized, 0]);\n }\n\n const MAX_DEPTH = 6;\n\n while (queue.length) {\n const nextItem = queue.shift();\n if (!nextItem) {\n break;\n }\n const [currentFile, currentDistance] = nextItem;\n const withinDepth = currentDistance < MAX_DEPTH;\n const notSeen = !seen.has(currentFile);\n const isRepoFile = !currentFile.includes(\"/node_modules/\");\n if (withinDepth && notSeen && isRepoFile) {\n seen.add(currentFile);\n // eslint-disable-next-line no-await-in-loop\n const specs = await extractImportSpecs(currentFile, specsCache);\n const nextDistance = currentDistance + 1;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n currentFile,\n spec,\n rootDir,\n resolutionCache\n );\n const usable = resolved && !resolved.includes(\"/node_modules/\");\n if (usable) {\n const existing = dist.get(resolved!);\n if (existing === undefined || nextDistance < existing) {\n dist.set(resolved!, nextDistance);\n queue.push([resolved!, nextDistance]);\n }\n }\n }\n }\n }\n\n return dist;\n};\n\nexport const renderPerFileCompositeTable = async (opts: {\n readonly absPath: string;\n readonly file: import(\"istanbul-lib-coverage\").FileCoverage;\n readonly root: string;\n readonly maxRows?: number;\n readonly maxHotspots?: number;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const rel = path.relative(opts.root, opts.absPath).replace(/\\\\/g, \"/\");\n const sum = opts.file.toSummary();\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const tableBudget = Math.max(\n 14,\n Math.min(opts.maxRows ?? rowsAvail - 1, rowsAvail + 8)\n );\n const rowBudget = Math.max(6, tableBudget - 6);\n const blocks = computeUncoveredBlocks(opts.file)\n .slice()\n .sort((firstRange, secondRange) => {\n const firstLength = firstRange.end - firstRange.start;\n const secondLength = secondRange.end - secondRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n });\n const missFns = missedFunctions(opts.file);\n const misses = missedBranches(opts.file);\n const total =\n typeof process.stdout.columns === \"number\" && process.stdout.columns > 20\n ? process.stdout.columns\n : 100;\n const fileMax = Math.max(32, Math.floor(total * 0.42));\n const detailMax = Math.max(20, Math.floor(total * 0.22));\n const barMax = Math.max(6, Math.floor(total * 0.06));\n const cols: readonly ColumnSpec[] = [\n { label: \"File\", min: 28, max: fileMax },\n { label: \"Section\", min: 8, max: 10 },\n { label: \"Where\", min: 10, max: 14 },\n { label: \"Lines%\", min: 6, max: 7, align: \"right\" },\n { label: \"Bar\", min: 6, max: barMax },\n { label: \"Funcs%\", min: 6, max: 7, align: \"right\" },\n { label: \"Branch%\", min: 7, max: 8, align: \"right\" },\n { label: \"Detail\", min: 18, max: detailMax },\n ];\n const rows: Cell[][] = [];\n const lPct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const fPct = Number.isFinite(sum.functions.pct) ? sum.functions.pct : 0;\n const bPct = Number.isFinite(sum.branches.pct) ? sum.branches.pct : 0;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(width);\n return linkifyPadded(opts.absPath, undefined, opts.editorCmd)(display);\n }),\n cell(\"Summary\", ansi.bold),\n cell(\"\u2014\"),\n cell(`${lPct.toFixed(1)}%`, tintPct(lPct)),\n cell(\"\".padEnd(10), barCell(compositeBarPct(sum, blocks))),\n cell(`${fPct.toFixed(1)}%`, tintPct(fPct)),\n cell(`${bPct.toFixed(1)}%`, tintPct(bPct)),\n cell(\"\"),\n ]);\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)\n )\n ),\n cell(\"Totals\", ansi.dim),\n cell(\"\u2014\", ansi.dim),\n cell(`${lPct.toFixed(1)}%`, ansi.dim),\n cell(\"\".padEnd(10), (padded) => ansi.dim(padded)),\n cell(`${fPct.toFixed(1)}%`, ansi.dim),\n cell(`${bPct.toFixed(1)}%`, ansi.dim),\n cell(\"\"),\n ]);\n if (blocks.length || missFns.length || misses.length) {\n const wantHs = Math.min(\n typeof opts.maxHotspots === \"number\"\n ? opts.maxHotspots\n : Math.ceil(rowBudget * 0.45),\n blocks.length\n );\n if (wantHs > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Hotspots\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(largest uncovered ranges)\", ansi.dim),\n ]);\n for (const hotspotRange of blocks.slice(0, wantHs)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n hotspotRange.start,\n opts.editorCmd\n )(display);\n }),\n cell(\"Hotspot\"),\n cell(`L${hotspotRange.start}\u2013L${hotspotRange.end}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(`${hotspotRange.end - hotspotRange.start + 1} lines`),\n ]);\n }\n }\n const wantFn = Math.min(Math.ceil(rowBudget * 0.25), missFns.length);\n if (wantFn > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Functions\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(never executed)\", ansi.dim),\n ]);\n for (const missedFunction of missFns.slice(0, wantFn)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedFunction.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Func\"),\n cell(`L${missedFunction.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(missedFunction.name),\n ]);\n }\n }\n const wantBr = Math.min(Math.ceil(rowBudget * 0.2), misses.length);\n if (wantBr > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Branches\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(paths with 0 hits)\", ansi.dim),\n ]);\n for (const missedBranch of misses.slice(0, wantBr)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedBranch.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Branch\"),\n cell(`L${missedBranch.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\n `#${missedBranch.id} missed [${missedBranch.zeroPaths.join(\", \")}]`\n ),\n ]);\n }\n }\n const target = rowBudget;\n if (rows.length < target) {\n const lineQueue: number[] = [];\n for (const hotspotRange of blocks) {\n for (let ln = hotspotRange.start; ln <= hotspotRange.end; ln += 1) {\n lineQueue.push(ln);\n }\n if (lineQueue.length > 5000) {\n break;\n }\n }\n while (rows.length < target && lineQueue.length) {\n const ln = lineQueue.shift()!;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(opts.absPath, ln, opts.editorCmd)(display);\n }),\n cell(\"Line\"),\n cell(`L${ln}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"uncovered\"),\n ]);\n }\n while (rows.length < target) {\n rows.push([\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n ]);\n }\n }\n }\n const table = renderTable(cols, rows);\n console.info(table);\n const sep = ansi.gray(\n \"\u2500\".repeat(\n Math.max(\n 20,\n typeof process.stdout.columns === \"number\"\n ? process.stdout.columns\n : 100\n )\n )\n );\n console.info(sep);\n};\n\nexport const printPerFileCompositeTables = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly pageFit?: boolean;\n readonly maxHotspots?: number;\n readonly selectionPaths?: readonly string[];\n readonly changedFiles?: readonly string[];\n readonly executedTests?: readonly string[];\n readonly editorCmd?: string;\n}): Promise<void> => {\n const selectionAbs = (opts.selectionPaths ?? []).map((selPath) =>\n path.resolve(selPath).replace(/\\\\/g, \"/\")\n );\n const changedAbs = (opts.changedFiles ?? []).map((chgPath) =>\n path.resolve(chgPath).replace(/\\\\/g, \"/\")\n );\n const tokenizeForSimilarity = (filePathForTokens: string) =>\n new Set(\n filePathForTokens\n .toLowerCase()\n .replace(/[^a-z0-9/_\\-.]/g, \" \")\n .split(/[/_.-]+/)\n .filter(Boolean)\n );\n const jaccard = (left: Set<string>, right: Set<string>) => {\n let intersectionCount = 0;\n for (const token of left) {\n if (right.has(token)) {\n intersectionCount += 1;\n }\n }\n const unionSize = left.size + right.size - intersectionCount || 1;\n return intersectionCount / unionSize;\n };\n const isSameDirOrChild = (firstAbs: string, secondAbs: string) => {\n const dirA = path.dirname(firstAbs).replace(/\\\\/g, \"/\");\n const dirB = path.dirname(secondAbs).replace(/\\\\/g, \"/\");\n return (\n dirA === dirB ||\n dirB.startsWith(`${dirA}/`) ||\n dirA.startsWith(`${dirB}/`)\n );\n };\n const selectionTokens = selectionAbs.map(tokenizeForSimilarity);\n const changedTokens = changedAbs.map(tokenizeForSimilarity);\n const executedTestsAbs = (opts.executedTests ?? [])\n .map((testPath) => path.resolve(testPath).replace(/\\\\/g, \"/\"))\n .filter((absPath) => absPath.length > 0);\n const testTokens = executedTestsAbs.map(tokenizeForSimilarity);\n const allMapFilesAbs = opts.map\n .files()\n .map((absPath) => path.resolve(absPath).replace(/\\\\/g, \"/\"));\n const uncoveredCandidates = allMapFilesAbs.filter((absPath) => {\n const sum = opts.map.fileCoverageFor(absPath).toSummary();\n return !(\n sum.lines.pct >= 100 &&\n sum.functions.pct >= 100 &&\n sum.branches.pct >= 100\n );\n });\n let candidates: string[];\n if (selectionAbs.length > 0 || executedTestsAbs.length > 0) {\n // When tests or production paths are explicitly selected, consider ALL covered files,\n // then we'll sort by relevancy to the executed tests/selection below.\n candidates = allMapFilesAbs.slice();\n } else {\n candidates = uncoveredCandidates;\n }\n // Always exclude test-like files from candidates\n candidates = candidates.filter((abs) => !isTestLikePath(abs));\n\n // Compute relevancy of each candidate file to executed tests using import graph distance.\n // Distance tiers: 0=selected file, 1=direct from test, 2+=transitive.\n const INF = 1e9;\n const distFromTests = executedTestsAbs.length\n ? await buildDistanceMapFromTests(executedTestsAbs, opts.root)\n : new Map<string, number>();\n const selectionSetAbs = new Set(selectionAbs);\n\n type Scored = {\n abs: string;\n rel: string;\n linesPct: number;\n group: number;\n score: number;\n distance: number;\n };\n const scored: Scored[] = await Promise.all(\n candidates.map(async (abs): Promise<Scored> => {\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const sum = opts.map.fileCoverageFor(abs).toSummary();\n const pct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const absNorm = path.resolve(abs).replace(/\\\\/g, \"/\");\n const selfTokens = tokenizeForSimilarity(absNorm);\n const selSim = Math.max(\n 0,\n ...selectionTokens.map((selectionTokenSet) =>\n jaccard(selfTokens, selectionTokenSet)\n )\n );\n const chgSim = Math.max(\n 0,\n ...changedTokens.map((changedTokenSet) =>\n jaccard(selfTokens, changedTokenSet)\n )\n );\n const tstSim = Math.max(\n 0,\n ...testTokens.map((tset) => jaccard(selfTokens, tset))\n );\n const nearSelection = selectionAbs.some((selectionPath) =>\n isSameDirOrChild(absNorm, selectionPath)\n );\n const nearChanged = changedAbs.some((changedPath) =>\n isSameDirOrChild(absNorm, changedPath)\n );\n const related = selSim > 0 || chgSim > 0 || nearSelection || nearChanged;\n\n // Use precomputed distance\n const distance = selectionSetAbs.has(absNorm)\n ? 0\n : distFromTests.get(absNorm) ?? INF;\n\n let group = 6;\n if (selectionSetAbs.has(absNorm)) {\n group = 0; // selected prod file\n } else if (distance === 1) {\n group = 1; // directly imported by tests\n } else if (distance >= 2 && distance <= 3) {\n group = 2; // nearby transitive\n } else if (distance < INF) {\n group = 3; // distant transitive\n } else if (related) {\n group = 4; // path-similar only\n } else if (pct > 0) {\n group = 5; // executed but not in graph\n } else {\n group = 6;\n }\n\n // similarity to selection/changed/tests, with slight demotion for config/\n const prefixPenalty = rel.startsWith(\"config/\") ? -100 : 0;\n const score =\n Math.round(selSim * 10) +\n Math.round(chgSim * 5) +\n Math.round(tstSim * 12) +\n prefixPenalty;\n return { abs: absNorm, rel, linesPct: pct, group, score, distance };\n })\n );\n let files = scored\n .sort(\n (left, right) =>\n left.group - right.group ||\n left.distance - right.distance ||\n right.score - left.score ||\n right.linesPct - left.linesPct ||\n left.rel.localeCompare(right.rel)\n )\n .map((scoredItem) => scoredItem.abs);\n // Move directly selected production files to the very top (if present)\n if (selectionAbs.length > 0) {\n const selectionSet = new Set(selectionAbs);\n const selectedHead = files.filter((filePath) => selectionSet.has(filePath));\n const nonSelected = files.filter((filePath) => !selectionSet.has(filePath));\n files = [...selectedHead, ...nonSelected];\n }\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const perFileRows = opts.pageFit\n ? Math.max(14, rowsAvail - 1)\n : rowsAvail + 8;\n for (const absolutePath of [...files].reverse()) {\n const fileCoverage = opts.map.fileCoverageFor(absolutePath);\n // Print least-relevant first, highest priority last (nearest the summary table)\n // and keep output order stable.\n // eslint-disable-next-line no-await-in-loop\n await renderPerFileCompositeTable({\n absPath: absolutePath,\n file: fileCoverage,\n root: opts.root,\n maxRows: perFileRows,\n ...(typeof opts.maxHotspots === \"number\"\n ? { maxHotspots: opts.maxHotspots }\n : {}),\n editorCmd: opts.editorCmd ?? \"\",\n });\n }\n};\n", "/* eslint-disable no-continue */\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as util from 'node:util';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport JSON5 from 'json5';\n\nimport { ansi, osc8 } from './ansi';\nimport { Colors, BackgroundColors } from './colors';\nimport { preferredEditorHref } from './paths';\nimport { collapseStacks, firstTestLocation, isStackLine, stripAnsiSimple } from './stacks';\n\n// near imports (fs already imported) \u2014 helper to find the last bridge JSON path\nconst extractBridgePath = (raw: string, cwd: string): string | null => {\n const matches = Array.from(\n raw.matchAll(/Test results written to:\\s+([^\\n\\r]+jest-bridge-[^\\s'\"]+\\.json)/g),\n );\n if (!matches.length) {\n return null;\n }\n const jsonPath = matches[matches.length - 1]![1]!.trim().replace(/^[\"'`]|[\"'`]$/g, '');\n return path.isAbsolute(jsonPath) ? jsonPath : path.resolve(cwd, jsonPath);\n};\n\n// Vitest-like formatter helpers\nexport const drawRule = (label?: string): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n if (!label) {\n return ansi.dim('\u2500'.repeat(width));\n }\n const plain = stripAnsiSimple(label);\n const pad = Math.max(1, width - plain.length - 1);\n return `${ansi.dim('\u2500'.repeat(pad))} ${label}`;\n};\n\ntype KnownEnv = NodeJS.ProcessEnv & {\n TEST_CLI_STACKS?: string;\n TEST_CLI_SUMMARY?: string;\n TEST_CLI_SHOW_CONSOLE?: string;\n NO_COLOR?: string;\n};\nconst env = process.env as unknown as KnownEnv;\n\nconst colorTokens = {\n pass: Colors.Success,\n fail: Colors.Failure,\n run: Colors.Run,\n skip: Colors.Skip,\n todo: Colors.Todo,\n passPill: (text: string) => BackgroundColors.Success(ansi.white(` ${text} `)),\n failPill: (text: string) => BackgroundColors.Failure(ansi.white(` ${text} `)),\n runPill: (text: string) => BackgroundColors.Run(ansi.white(` ${text} `)),\n};\n\nconst MAX_CONSOLE_ERRORS_TO_SHOW = 3;\n\n// Pretty diff helpers\nconst isArrayOfPrimitives = (value: unknown): value is Array<string | number | boolean | null> =>\n Array.isArray(value) &&\n value.every(\n (element) => ['string', 'number', 'boolean'].includes(typeof element) || element === null,\n );\n\ntype DiffPayload = { expected?: unknown; received?: unknown };\n\n// Normalize and indentation helpers for prettier-style rendering\nexport const indentBlock = (text: string, pad = ' '): string =>\n text\n .split('\\n')\n .map((line) => (line ? pad + line : pad.trimEnd()))\n .join('\\n');\n\nexport const prettifyPrettyFormatBlock = (raw: string): string => {\n const lines = raw.split('\\n');\n if (!lines.length) {\n return raw;\n }\n\n // Accept both pretty-format and already-normalized blocks\n const first = lines[0] ?? '';\n const isArrayStart = /^\\s*(?:Array\\s*\\[|\\[)\\s*$/.test(first);\n const isObjectStart = /^\\s*(?:Object\\s*\\{|\\{)\\s*$/.test(first);\n if (!isArrayStart && !isObjectStart) {\n return raw;\n }\n\n // Normalize the opener\n lines[0] = first\n .replace(/^(\\s*)Array\\s*\\[/, '$1[')\n .replace(/^(\\s*)Object\\s*\\{/, '$1{')\n .replace(/^\\s*\\[\\s*$/, '[')\n .replace(/^\\s*\\{\\s*$/, '{');\n\n const closingChar = isArrayStart ? ']' : '}';\n // Find the closing line\n let closeIdx = -1;\n for (let i = 1; i < lines.length; i += 1) {\n if (/^\\s*[\\]}]\\s*$/.test(lines[i]!)) {\n closeIdx = i;\n break;\n }\n }\n if (closeIdx < 0) {\n return lines.join('\\n');\n }\n\n const inner = lines.slice(1, closeIdx);\n\n // Compute the baseline indent across non-empty inner lines\n const indents: number[] = [];\n for (const lineText of inner) {\n if (lineText.trim().length === 0) {\n continue;\n }\n indents.push(lineText.match(/^\\s*/)?.[0]?.length ?? 0);\n }\n const minIndent = indents.length ? Math.min(...indents) : 0;\n\n // Re-indent so the *minimum* inner indent becomes exactly two spaces,\n // preserving relative nesting deeper than that.\n const reindented = inner.map((lineText, idx) => {\n if (lineText.trim().length === 0) {\n return lineText;\n } // keep blank lines blank\n const current = lineText.match(/^\\s*/)?.[0]?.length ?? 0;\n const rest = lineText.slice(current);\n const extra = Math.max(0, current - minIndent);\n const base = ' '; // Prettier-style 2-space base\n // Optionally remove trailing comma on the last inner item to be more Prettier-like\n const withoutDangling = idx === inner.length - 1 ? rest.replace(/,\\s*$/, '') : rest;\n return base + ' '.repeat(extra) + withoutDangling;\n });\n\n // Normalize the closer to be flush with the opener (no extra inner spaces)\n lines.splice(1, inner.length, ...reindented);\n lines[closeIdx] = closingChar;\n\n return lines.join('\\n');\n};\n\nconst normalizeBlock = (raw: string) =>\n raw\n .replace(/^\\s*Array\\s*\\[/, '[')\n .replace(/^\\s*Object\\s*\\{/, '{')\n // remove dangling commas just before ] or }\n .replace(/,(\\s*[\\]}])/g, '$1');\n\nexport const stringifyPrettierish = (value: unknown): string => {\n // strings coming from Jest diff\n if (typeof value === 'string') {\n const text = normalizeBlock(value.trim());\n if (/^[[{]/.test(text)) {\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n /* fall through */\n }\n }\n return value;\n }\n // real data: arrays/objects\n if (Array.isArray(value) || (value && typeof value === 'object')) {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n /* circulars etc \u2014 fall through */\n }\n }\n // everything else\n return util.inspect(value, { depth: 10, breakLength: Infinity, compact: false, sorted: true });\n};\n\nexport const drawFailRule = (label = ' FAIL '): string => drawRule(colorTokens.failPill(label));\n\n// NEW: plain red line rule (no label), matching Vitest section rules\nexport const drawFailLine = (): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n return colorTokens.fail('\u2500'.repeat(width));\n};\n\nexport const renderRunLine = (cwd: string): string =>\n `${colorTokens.runPill('RUN')} ${ansi.dim(cwd.replace(/\\\\/g, '/'))}`;\n\nexport const colorStackLine = (line: string, projectHint: RegExp): string => {\n const plainLine = stripAnsiSimple(line);\n if (!isStackLine(plainLine)) {\n return plainLine;\n }\n const match = plainLine.match(/\\(?([^\\s()]+):(\\d+):(\\d+)\\)?$/);\n if (!match) {\n return ansi.dim(plainLine);\n }\n const file = match[1]!.replace(/\\\\/g, '/');\n const lineNumber = match[2]!;\n const columnNumber = match[3]!;\n const coloredPath = projectHint.test(file) ? ansi.cyan(file) : ansi.dim(file);\n return plainLine.replace(\n match[0]!,\n `(${coloredPath}${ansi.dim(':')}${ansi.white(`${lineNumber}:${columnNumber}`)})`,\n );\n};\n\nexport const renderCodeFrame = (lines: readonly string[], start: number): string[] => {\n const out: string[] = [];\n for (let i = start; i < lines.length; i += 1) {\n const raw = stripAnsiSimple(lines[i]!);\n if (!raw.trim()) {\n break;\n }\n if (/^\\s*\\^+\\s*$/.test(raw)) {\n out.push(` ${colorTokens.fail(raw.trimEnd())}`);\n continue;\n }\n const pointerMatch = raw.match(/^\\s*>(\\s*\\d+)\\s*\\|\\s?(.*)$/);\n if (pointerMatch) {\n const num = ansi.dim(pointerMatch[1]!.trim());\n const code = ansi.yellow(pointerMatch[2] ?? '');\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n const normalMatch = raw.match(/^\\s*(\\d+)\\s*\\|\\s?(.*)$/);\n if (normalMatch) {\n const num = ansi.dim(normalMatch[1]!);\n const code = ansi.dim(normalMatch[2] ?? '');\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n out.push(` ${raw}`);\n }\n return out;\n};\n\n// NEW: read file lines cache + synthesized codeframe\nconst _sourceCache = new Map<string, string[]>();\nconst readSource = (file: string): string[] => {\n const normalizedFile = file.replace(/\\\\/g, '/');\n const cached = _sourceCache.get(normalizedFile);\n if (cached) {\n return cached;\n }\n try {\n const txt = fs.readFileSync(normalizedFile, 'utf8');\n const arr = txt.split(/\\r?\\n/);\n _sourceCache.set(normalizedFile, arr);\n return arr;\n } catch {\n return [];\n }\n};\n\nexport const renderSourceCodeFrame = (file: string, line: number, context = 3): string[] => {\n const lines = readSource(file);\n if (!lines.length || !Number.isFinite(line)) {\n return [];\n }\n const idx = Math.max(1, Math.min(line, lines.length));\n const start = Math.max(1, idx - context);\n const end = Math.min(lines.length, idx + context);\n\n const out: string[] = [];\n for (let currentLineNumber = start; currentLineNumber <= end; currentLineNumber += 1) {\n const num = ansi.dim(String(currentLineNumber));\n const code =\n currentLineNumber === idx\n ? ansi.yellow(lines[currentLineNumber - 1] ?? '')\n : ansi.dim(lines[currentLineNumber - 1] ?? '');\n if (currentLineNumber === idx) {\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n }\n }\n out.push(` ${colorTokens.fail('^')}`);\n return out;\n};\n\n// PATCH: deepest project frame (last match in the stack)\nconst findLastProjectFrameIndex = (lines: readonly string[], projectHint: RegExp): number => {\n for (let i = lines.length - 1; i >= 0; i -= 1) {\n const simple = stripAnsiSimple(lines[i]!);\n if (\n isStackLine(simple) &&\n projectHint.test(simple) &&\n !/node_modules|vitest|jest/.test(simple)\n ) {\n return i;\n }\n }\n return -1;\n};\n\n// NEW: short stack tail (last N frames), colored\nconst renderStackTail = (lines: readonly string[], projectHint: RegExp, max = 4): string[] => {\n const onlyStack = lines.filter((candidateLine) => isStackLine(stripAnsiSimple(candidateLine)));\n if (!onlyStack.length) {\n return [];\n }\n const tail = onlyStack.slice(-max);\n return tail.map((frameLine) => ` ${colorStackLine(frameLine, projectHint)}`);\n};\n\n// NEW: first N project frames from the stack (top-down)\nconst firstProjectFrames = (lines: readonly string[], projectHint: RegExp, max = 2): string[] => {\n const onlyStack = lines.filter((ln) => isStackLine(stripAnsiSimple(ln)));\n const projectOnly = onlyStack.filter((ln) => projectHint.test(stripAnsiSimple(ln)));\n return projectOnly.slice(0, max).map((ln) => ` ${colorStackLine(ln, projectHint)}`);\n};\n\n// NEW: extract assertion message (matcher hint + Expected/Received/diff)\nconst isTerminator = (lineText: string) => !lineText.trim() || isStackLine(lineText);\n\nexport const extractAssertionMessage = (msgLines: readonly string[]): string[] => {\n const lines = msgLines.map((rawLine: string) => stripAnsiSimple(rawLine));\n const out: string[] = [];\n\n const hintIdx = lines.findIndex(\n (candidateLine: string) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(candidateLine) ||\n /\\b(?:AssertionError|Error):/.test(candidateLine),\n );\n if (hintIdx >= 0) {\n out.push(lines[hintIdx]!);\n }\n\n const collectBlock = (start: number) => {\n out.push(lines[start]!);\n for (let i = start + 1; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n };\n\n const expectedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Expected:/.test(candidateLine),\n );\n const receivedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Received:/.test(candidateLine),\n );\n const diffIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*(?:- Expected|\\+ Received|Difference:)/.test(candidateLine),\n );\n\n if (expectedIdx >= 0) {\n collectBlock(expectedIdx);\n }\n if (receivedIdx >= 0) {\n collectBlock(receivedIdx);\n }\n if (diffIdx >= 0) {\n collectBlock(diffIdx);\n }\n\n // fallback: grab up to 4 non-stack lines after hint\n if (out.length === 0 && hintIdx >= 0) {\n for (let i = hintIdx + 1; i < lines.length && out.length < 4; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n }\n return out;\n};\n\n// PATCH: convert a single stack line to \"file:line\" (for editor link)\nconst stackLocation = (line: string): { file: string; line: number } | null => {\n const match = stripAnsiSimple(line).match(/\\(?([^\\s()]+):(\\d+):\\d+\\)?$/);\n return match ? { file: match[1]!.replace(/\\\\/g, '/'), line: Number(match[2]!) } : null;\n};\nexport const JEST_BRIDGE_REPORTER_SOURCE = `const fs = require('fs');\nconst path = require('path');\n\nclass BridgeReporter {\n constructor(globalConfig, options) {\n this.out = process.env.JEST_BRIDGE_OUT || (options && options.outFile) || path.join(process.cwd(), 'coverage', 'jest-run.json');\n this.buf = { startTime: Date.now(), testResults: [], aggregated: null };\n }\n onRunStart() { this.buf.startTime = Date.now(); }\n onTestResult(_test, tr) {\n const mapAssertion = (a) => ({\n title: a.title,\n fullName: a.fullName || [...(a.ancestorTitles || []), a.title].join(' '),\n status: a.status,\n duration: a.duration || 0,\n location: a.location || null,\n failureMessages: (a.failureMessages || []).map(String),\n });\n this.buf.testResults.push({\n testFilePath: tr.testFilePath,\n status: tr.numFailingTests ? 'failed' : 'passed',\n failureMessage: tr.failureMessage || '',\n failureDetails: tr.failureDetails || [],\n console: tr.console || null,\n perfStats: tr.perfStats || {},\n testResults: (tr.testResults || []).map(mapAssertion),\n });\n }\n onRunComplete(_contexts, agg) {\n this.buf.aggregated = {\n numTotalTestSuites: agg.numTotalTestSuites,\n numPassedTestSuites: agg.numPassedTestSuites,\n numFailedTestSuites: agg.numFailedTestSuites,\n numTotalTests: agg.numTotalTests,\n numPassedTests: agg.numPassedTests,\n numFailedTests: agg.numFailedTests,\n numPendingTests: agg.numPendingTests,\n numTodoTests: agg.numTodoTests,\n startTime: agg.startTime,\n success: agg.success,\n runTimeMs: agg.testResults.reduce((t, r) => t + Math.max(0, (r.perfStats?.end || 0) - (r.perfStats?.start || 0)), 0),\n };\n fs.mkdirSync(path.dirname(this.out), { recursive: true });\n fs.writeFileSync(this.out, JSON.stringify(this.buf), 'utf8');\n }\n}\nmodule.exports = BridgeReporter;`;\n\ntype Dict = Record<string, unknown>;\n\nconst asDict = (value: unknown): Dict | null =>\n value && typeof value === 'object' ? (value as Dict) : null;\n\nconst get = (objectValue: Dict | null, key: string): unknown =>\n objectValue ? objectValue[key] : undefined;\n\nconst getStr = (objectValue: Dict | null, key: string): string | undefined => {\n const candidate = get(objectValue, key);\n return typeof candidate === 'string' ? candidate : undefined;\n};\n\nexport function linesFromDetails(details: readonly unknown[] | undefined): {\n stacks: string[];\n messages: string[];\n} {\n const stacks: string[] = [];\n const messages: string[] = [];\n if (!details) {\n return { stacks, messages };\n }\n\n const pushMaybe = (value: unknown, bucket: string[]) => {\n if (typeof value === 'string' && value.trim()) {\n bucket.push(...value.split(/\\r?\\n/));\n }\n };\n\n for (const detail of details) {\n if (typeof detail === 'string') {\n if (/\\s+at\\s.+\\(.+:\\d+:\\d+\\)/.test(detail)) {\n pushMaybe(detail, stacks);\n } else {\n pushMaybe(detail, messages);\n }\n continue;\n }\n const dict = asDict(detail);\n if (dict) {\n pushMaybe(getStr(dict, 'stack'), stacks);\n pushMaybe(getStr(dict, 'message'), messages);\n\n const err = asDict(get(dict, 'error'));\n pushMaybe(getStr(err, 'stack'), stacks);\n pushMaybe(getStr(err, 'message'), messages);\n\n const matcherResult = asDict(get(dict, 'matcherResult'));\n pushMaybe(getStr(matcherResult, 'stack'), stacks);\n pushMaybe(getStr(matcherResult, 'message'), messages);\n pushMaybe(getStr(matcherResult, 'expected'), messages);\n pushMaybe(getStr(matcherResult, 'received'), messages);\n }\n }\n return { stacks, messages };\n}\n\n// NEW: choose a label that matches the payload\nexport function labelForMessage(lines: readonly string[]): string {\n const joined = lines.join(' ');\n const matched =\n joined.match(/\\b(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/) ||\n joined.match(/\\bError\\b/);\n if (matched) {\n const typeName = (matched[1] as string | undefined) ?? 'Error';\n return `${typeName}:`;\n }\n return /expect\\(.+?\\)\\.(?:to|not\\.)/.test(joined) ? 'Assertion:' : 'Message:';\n}\n\n/** Try to pull rich expected/received from\n * failureDetails.matcherResult; else sniff from message lines */\nexport function extractExpectedReceived(\n details?: readonly unknown[],\n lines?: readonly string[],\n): DiffPayload {\n if (details) {\n for (const detail of details) {\n const dict = asDict(detail);\n const matcherResult = dict && asDict(get(dict, 'matcherResult'));\n if (matcherResult) {\n const expected = get(matcherResult, 'expected');\n const received = get(matcherResult, 'received');\n if (expected !== undefined || received !== undefined) {\n return { expected, received };\n }\n }\n }\n }\n if (lines && lines.length) {\n const expectedLines: string[] = [];\n const receivedLines: string[] = [];\n let mode: 'none' | 'exp' | 'rec' = 'none';\n for (const rawLine of lines) {\n const simple = stripAnsiSimple(rawLine);\n if (/^\\s*Expected:/.test(simple)) {\n mode = 'exp';\n expectedLines.push(simple.replace(/^\\s*Expected:\\s*/, ''));\n continue;\n }\n if (/^\\s*Received:/.test(simple)) {\n mode = 'rec';\n receivedLines.push(simple.replace(/^\\s*Received:\\s*/, ''));\n continue;\n }\n if (/^\\s*[-+]\\s/.test(simple)) {\n continue;\n }\n if (!simple.trim()) {\n mode = 'none';\n } else if (mode === 'exp') {\n expectedLines.push(simple);\n } else if (mode === 'rec') {\n receivedLines.push(simple);\n }\n }\n if (expectedLines.length || receivedLines.length) {\n return { expected: expectedLines.join('\\n'), received: receivedLines.join('\\n') };\n }\n const unified = extractFromUnifiedDiff(lines);\n if (unified.expected !== undefined || unified.received !== undefined) {\n return unified;\n }\n }\n return {};\n}\n\nexport function extractFromUnifiedDiff(rawLines: readonly string[]): {\n expected?: string;\n received?: string;\n} {\n const lines = rawLines.map((lineText) => stripAnsiSimple(lineText));\n\n // Find the first pretty-format block start, signed or unsigned\n let startIndex = -1;\n for (let i = 0; i < lines.length; i += 1) {\n const lt = lines[i]!;\n if (/^\\s*(?:[-+]\\s*)?(Array\\s*\\[|Object\\s*\\{)/.test(lt)) {\n startIndex = i;\n break;\n }\n }\n if (startIndex < 0) {\n return {};\n }\n\n const expectedParts: string[] = [];\n const receivedParts: string[] = [];\n\n let opened = false;\n let expDone = false;\n let recDone = false;\n const canParseJsonish = (input: string): boolean => {\n const text = normalizeBlock(input).trim();\n try {\n JSON5.parse(text);\n return true;\n } catch {\n return false;\n }\n };\n\n for (let i = startIndex; i < lines.length; i += 1) {\n const lineText = lines[i]!;\n const unsigned = lineText.replace(/^\\s*[-+]\\s?/, '');\n const isMinus = /^\\s*-\\s/.test(lineText);\n const isPlus = /^\\s*\\+\\s/.test(lineText);\n\n if (!opened) {\n const looksLikeStart = /^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(unsigned);\n if (!looksLikeStart) {\n // Skip unrelated lines before the pretty block\n continue;\n }\n opened = true;\n }\n\n if (isMinus) {\n expectedParts.push(unsigned);\n } else if (isPlus) {\n receivedParts.push(unsigned);\n } else {\n expectedParts.push(unsigned);\n receivedParts.push(unsigned);\n }\n\n if (!expDone && expectedParts.length > 0) {\n const expJoined = expectedParts.join('\\n');\n expDone = canParseJsonish(expJoined);\n }\n if (!recDone && receivedParts.length > 0) {\n const recJoined = receivedParts.join('\\n');\n recDone = canParseJsonish(recJoined);\n }\n if (opened && expDone && recDone) {\n break;\n }\n }\n\n const toJsonLikeString = (joined: string | undefined): string | undefined => {\n if (!joined) {\n return undefined;\n }\n const text = normalizeBlock(joined).trim();\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return text;\n }\n };\n\n const expected = expectedParts.length ? expectedParts.join('\\n') : undefined;\n const received = receivedParts.length ? receivedParts.join('\\n') : undefined;\n const result: { expected?: string; received?: string } = {};\n const expStr = toJsonLikeString(expected);\n const recStr = toJsonLikeString(received);\n if (expStr !== undefined) {\n result.expected = expStr;\n }\n if (recStr !== undefined) {\n result.received = recStr;\n }\n return result;\n}\n\nfunction renderPrettyDiff(payload: DiffPayload): string[] {\n const out: string[] = [];\n const { expected, received } = payload;\n if (expected === undefined && received === undefined) {\n return out;\n }\n\n const expectedString = stringifyPrettierish(expected);\n const receivedString = stringifyPrettierish(received);\n\n out.push(\n ` ${ansi.bold('Expected')} ${ansi.dim(\n expected && Array.isArray(expected) ? `(len ${(expected as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.pass(expectedString)));\n out.push(\n ` ${ansi.bold('Received')} ${ansi.dim(\n received && Array.isArray(received) ? `(len ${(received as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.fail(receivedString)));\n\n if (isArrayOfPrimitives(expected) && isArrayOfPrimitives(received)) {\n const expectedSet = new Set(expected.map((element) => String(element)));\n const receivedSet = new Set(received.map((element) => String(element)));\n const missing = [...expectedSet].filter((element) => !receivedSet.has(element));\n const unexpected = [...receivedSet].filter((element) => !expectedSet.has(element));\n const parts: string[] = [];\n if (missing.length) {\n parts.push(\n `${missing.length} missing: ${missing\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${missing.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (unexpected.length) {\n parts.push(\n `${unexpected.length} unexpected: ${unexpected\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${unexpected.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (parts.length) {\n out.push(` ${ansi.dim('Difference:')} ${colorTokens.fail(parts.join(ansi.dim(' | ')))}`);\n }\n }\n\n out.push('');\n return out;\n}\n\nfunction pickPrimaryMessage(\n candidateMessageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n): string[] {\n const extracted = extractAssertionMessage(candidateMessageLines);\n if (extracted.length) {\n return extracted;\n }\n const errorLine = details.messages.find((lineText) =>\n /\\b(?:Error|TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/.test(lineText),\n );\n if (errorLine) {\n return [errorLine];\n }\n const firstNonEmpty = details.messages.find((lineText) => lineText.trim().length);\n if (firstNonEmpty) {\n return [firstNonEmpty];\n }\n return [];\n}\n\nfunction colorUnifiedDiffLine(simple: string): string {\n if (/^\\s*-\\s/.test(simple)) {\n return colorTokens.fail(simple);\n }\n if (/^\\s*\\+\\s/.test(simple)) {\n return colorTokens.pass(simple);\n }\n return simple;\n}\n\nexport type Loc = { file: string; line: number };\n\nexport type BuildCtx = {\n readonly projectHint: RegExp;\n readonly editorCmd: string | undefined;\n readonly showStacks: boolean;\n};\n\nexport const findCodeFrameStart = (lines: readonly string[]): number =>\n lines.findIndex((line) => /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(line)));\n\nexport const deepestProjectLoc = (\n stackLines: readonly string[],\n projectHint: RegExp,\n): Loc | null => {\n const idx = findLastProjectFrameIndex(stackLines, projectHint);\n return idx >= 0 ? stackLocation(stackLines[idx]!) : null;\n};\n\nexport const buildCodeFrameSection = (\n messageLines: readonly string[],\n ctx: BuildCtx,\n synthLoc?: Loc | null,\n): string[] => {\n const lines: string[] = [];\n const start = findCodeFrameStart(messageLines);\n if (start >= 0) {\n lines.push(...renderCodeFrame(messageLines, start), '');\n return lines;\n }\n if (ctx.showStacks && synthLoc) {\n lines.push(...renderSourceCodeFrame(synthLoc.file, synthLoc.line), '');\n }\n return lines;\n};\n\nexport const buildPrettyDiffSection = (\n details?: readonly unknown[],\n messageLines?: readonly string[],\n): string[] => renderPrettyDiff(extractExpectedReceived(details, messageLines));\n\nexport const buildMessageSection = (\n messageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n ctx: BuildCtx,\n opts?: { suppressDiff?: boolean; stackPreview?: readonly string[] },\n): string[] => {\n const out: string[] = [];\n\n const primary = pickPrimaryMessage(messageLines, details);\n\n const filtered = opts?.suppressDiff\n ? primary.filter((raw) => {\n const simple = stripAnsiSimple(raw);\n return (\n !/^\\s*(Expected:|Received:|Difference:)\\b/.test(simple) &&\n !/^\\s*[-+]\\s/.test(simple) &&\n !/^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(simple)\n );\n })\n : primary;\n\n if (filtered.length) {\n const label = labelForMessage(filtered);\n out.push(` ${ansi.bold(label)}`);\n for (const lineText of filtered) {\n out.push(` ${ansi.yellow(colorUnifiedDiffLine(lineText))}`);\n }\n if (opts?.stackPreview && opts.stackPreview.length) {\n for (const frame of opts.stackPreview) {\n out.push(frame);\n }\n }\n out.push('');\n }\n return out;\n};\n\ntype ConsoleEntry = Readonly<{\n type?: unknown;\n message?: unknown;\n origin?: unknown;\n}>;\n\nfunction isConsoleEntry(candidate: unknown): candidate is ConsoleEntry {\n return typeof candidate === 'object' && candidate !== null;\n}\n\nexport const buildConsoleSection = (maybeConsole: unknown): string[] => {\n const out: string[] = [];\n if (!Array.isArray(maybeConsole)) {\n return out;\n }\n\n const entries = maybeConsole.filter(isConsoleEntry);\n\n const errorsOnly = entries.filter((entry) => {\n const val = entry?.type;\n return String(val ?? '').toLowerCase() === 'error';\n });\n const scored = errorsOnly\n .map((entry) => {\n const raw = entry?.message as unknown;\n const msg = Array.isArray(raw)\n ? raw.map(String).join(' ')\n : typeof raw === 'string'\n ? raw\n : String(raw ?? '');\n return { msg, score: msg.length };\n })\n .filter((item) => item.msg.trim().length > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, MAX_CONSOLE_ERRORS_TO_SHOW);\n if (scored.length) {\n out.push(ansi.dim(' Console errors:'));\n for (const item of scored) {\n out.push(` ${ansi.dim('\u2022')} ${item.msg}`);\n }\n out.push('');\n }\n return out;\n};\n\nexport const buildStackSection = (\n mergedForStack: readonly string[],\n ctx: BuildCtx,\n fallbackLoc?: Loc | null,\n): string[] => {\n const out: string[] = [];\n out.push(ansi.dim(' Stack:'));\n if (!ctx.showStacks) {\n out.push(` ${ansi.dim('(hidden by TEST_CLI_STACKS=)')}`, '');\n return out;\n }\n const tail = renderStackTail(mergedForStack, ctx.projectHint, 4);\n if (tail.length) {\n out.push(...tail);\n const loc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n if (loc) {\n const href = preferredEditorHref(loc.file, loc.line, ctx.editorCmd);\n out.push(` ${ansi.dim('at')} ${osc8(`${path.basename(loc.file)}:${loc.line}`, href)}`);\n }\n out.push('');\n return out;\n }\n if (fallbackLoc) {\n out.push(\n ` ${colorStackLine(`${fallbackLoc.file}:${fallbackLoc.line}:0`, ctx.projectHint)}`,\n '',\n );\n return out;\n }\n out.push(` ${ansi.dim('(no stack provided)')}`, '');\n return out;\n};\n\nexport const buildFileBadgeLine = (rel: string, failedCount: number): string =>\n failedCount > 0\n ? `${colorTokens.failPill('FAIL')} ${ansi.white(rel)}`\n : `${colorTokens.passPill('PASS')} ${ansi.white(rel)}`;\n\nexport const buildPerFileOverview = (\n rel: string,\n assertions: readonly { readonly fullName: string; readonly status: string }[],\n): string[] => {\n const out: string[] = [];\n out.push(`${ansi.magenta(rel)} ${ansi.dim(`(${assertions.length})`)}`);\n for (const assertion of assertions) {\n const name = assertion.fullName;\n if (assertion.status === 'passed') {\n out.push(` ${colorTokens.pass('\u2713')} ${ansi.dim(name)}`);\n } else if (assertion.status === 'todo') {\n out.push(` ${colorTokens.todo('\u2610')} ${ansi.dim(name)} ${colorTokens.todo('[todo]')}`);\n } else if (assertion.status === 'pending') {\n out.push(` ${colorTokens.skip('\u2193')} ${ansi.dim(name)} ${colorTokens.skip('[skipped]')}`);\n } else {\n out.push(` ${colorTokens.fail('\u00D7')} ${ansi.white(name)}`);\n }\n }\n out.push('');\n return out;\n};\n\nexport const formatJestOutputVitest = (\n raw: string,\n opts?: { readonly cwd?: string; readonly editorCmd?: string },\n): string => {\n const showStacks = Boolean(env.TEST_CLI_STACKS);\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const lines = raw.split(/\\r?\\n/);\n const out: string[] = [];\n const seenFailures = new Set<string>();\n const seenFiles = new Set<string>();\n for (let lineIndex = 0; lineIndex < lines.length; ) {\n const ln = stripAnsiSimple(lines[lineIndex]!);\n if (/^\\s*\u25CF\\s+/.test(ln)) {\n const title = ln.replace(/^\\s*\u25CF\\s+/, '').trim();\n const block: string[] = [lines[lineIndex]!];\n let scanIndex = lineIndex + 1;\n while (scanIndex < lines.length) {\n const scanLine = stripAnsiSimple(lines[scanIndex]!);\n const nextIsStart =\n /^\\s*\u25CF\\s+/.test(scanLine) ||\n /^\\s*(PASS|FAIL)\\s/.test(scanLine) ||\n /^\\s*Test Suites:/.test(scanLine);\n if (nextIsStart && stripAnsiSimple(lines[scanIndex - 1] ?? '').trim() === '') {\n break;\n }\n block.push(lines[scanIndex]!);\n scanIndex += 1;\n }\n const codeFrameStart = block.findIndex((candidateLine) =>\n /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(candidateLine)),\n );\n const location = firstTestLocation(block, projectHint);\n const rel = location\n ? location.split(':')[0]!.replace(/\\\\/g, '/').replace(`${cwd}/`, '')\n : '';\n const key = `${rel}|${title}`;\n if (seenFailures.has(key)) {\n lineIndex = scanIndex;\n continue;\n }\n seenFailures.add(key);\n out.push(drawFailLine());\n const header = `${colorTokens.fail('\u00D7')} ${ansi.white(rel ? `${rel} > ${title}` : title)}`;\n out.push(header);\n // Reordered block: header already printed \u2192 codeframe \u2192 pretty diff \u2192 message \u2192 stack\n const linesBlock = block.map(String);\n const collapsedForSrc = collapseStacks(linesBlock.slice(0));\n // 1) Codeframe (embedded or synthesized)\n if (codeFrameStart >= 0) {\n out.push('');\n out.push(...renderCodeFrame(linesBlock, codeFrameStart));\n out.push('');\n } else if (showStacks) {\n const deepestIdxForSrc = findLastProjectFrameIndex(collapsedForSrc, projectHint);\n const locForSrc =\n deepestIdxForSrc >= 0 ? stackLocation(collapsedForSrc[deepestIdxForSrc]!) : null;\n if (locForSrc) {\n out.push('');\n out.push(...renderSourceCodeFrame(locForSrc.file, locForSrc.line));\n out.push('');\n }\n }\n // 2) Pretty Expected/Received\n const payload = extractExpectedReceived(undefined, linesBlock);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n // 3) Message with label + inline top project frames\n const detailsForMsg = linesFromDetails(undefined);\n const collapsedForTail = collapseStacks(linesBlock.slice(0));\n const stackPreview = showStacks ? firstProjectFrames(collapsedForTail, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(\n linesBlock,\n detailsForMsg,\n { projectHint, editorCmd: opts?.editorCmd, showStacks },\n { suppressDiff: hasPretty, stackPreview },\n ),\n );\n\n // 4) Stack tail last \u2014 only if we didn\u2019t inline a preview\n if (showStacks && stackPreview.length === 0) {\n const collapsed = collapseStacks(linesBlock.slice(0));\n out.push(\n ...buildStackSection(collapsed, {\n projectHint,\n editorCmd: opts?.editorCmd,\n showStacks,\n }),\n );\n }\n out.push(drawFailLine());\n out.push('');\n lineIndex = scanIndex;\n continue;\n }\n const passFail = ln.match(/^\\s*(PASS|FAIL)\\s+(.+)$/);\n if (passFail) {\n const badge = passFail[1]!;\n const fileAbs = passFail[2]!;\n const rel = fileAbs.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n if (seenFiles.has(rel)) {\n lineIndex += 1;\n continue;\n }\n seenFiles.add(rel);\n const pill = badge === 'PASS' ? colorTokens.passPill('PASS') : colorTokens.failPill('FAIL');\n out.push(`${pill} ${ansi.white(rel)}`);\n lineIndex += 1;\n continue;\n }\n if (/^\\s*(Test Suites:|Tests:|Snapshots:|Time:|Ran all)/.test(ln)) {\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n continue;\n }\n if (isStackLine(ln)) {\n if (showStacks) {\n const kept = collapseStacks([lines[lineIndex]!]);\n out.push(...kept);\n }\n lineIndex += 1;\n continue;\n }\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n }\n const rendered = out.join('\\n');\n // Detect if no test sections were parsed from the live stream and fall back to JSON rendering\n const hadParsedTests =\n seenFiles.size > 0 ||\n seenFailures.size > 0 ||\n out.some((lineText) => /^(?:\\s*)(PASS|FAIL)\\b/.test(stripAnsiSimple(lineText)));\n\n if (!hadParsedTests) {\n const bridgePath = extractBridgePath(raw, cwd);\n if (bridgePath && fs.existsSync(bridgePath)) {\n try {\n const json = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));\n const bridge = coerceJestJsonToBridge(json);\n const renderedFromJson = renderVitestFromJestJSON(bridge, opts);\n const prefix = out.join('\\n');\n return prefix ? `${prefix}\\n${renderedFromJson}` : renderedFromJson;\n } catch {\n // if JSON load fails, fall through to the minimal stream output\n }\n }\n }\n try {\n const preview = rendered.split('\\n').slice(0, 2).join('\\n');\n // eslint-disable-next-line no-console\n console.info(`formatJestOutputVitest: produced ${out.length} lines; preview:\\n${preview}`);\n } catch {\n /* no-op */\n }\n return rendered;\n};\n\nexport type BridgeJSON = {\n startTime: number;\n testResults: Array<{\n testFilePath: string;\n status: 'passed' | 'failed';\n failureMessage: string;\n failureDetails?: unknown[];\n console?: Array<{ message?: string; type?: string; origin?: string }> | null;\n testResults: Array<{\n fullName: string;\n status: string;\n duration: number;\n location: { line: number; column: number } | null;\n failureMessages: string[];\n }>;\n }>;\n aggregated: {\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n startTime: number;\n success: boolean;\n runTimeMs?: number;\n };\n};\n\ntype JestAssertionResult = {\n title: string;\n ancestorTitles: string[];\n status: string;\n location?: { line: number; column: number } | null;\n failureMessages?: string[];\n fullName?: string;\n duration?: number;\n};\n\ntype JestTestResultExtra = {\n readonly failureDetails?: unknown[];\n readonly console?: ReadonlyArray<{\n message?: unknown;\n type?: unknown;\n origin?: unknown;\n }> | null;\n readonly perfStats?: Readonly<Record<string, unknown>>;\n};\n\ntype JestTestResult = {\n testFilePath?: string;\n name?: string;\n status: 'passed' | 'failed';\n failureMessage?: string;\n assertionResults?: JestAssertionResult[];\n} & JestTestResultExtra;\n\ntype JestAggregatedResult = {\n startTime: number;\n success: boolean;\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n testResults: JestTestResult[];\n};\n\nconst isBridgeJSONLike = (candidate: unknown): candidate is BridgeJSON => {\n const candidateValue = candidate as Record<string, unknown> | null;\n return (\n typeof candidateValue === 'object' &&\n candidateValue !== null &&\n 'aggregated' in (candidateValue as Record<string, unknown>)\n );\n};\n\nexport function coerceJestJsonToBridge(raw: unknown): BridgeJSON {\n if (isBridgeJSONLike(raw)) {\n return raw as BridgeJSON;\n }\n const j = raw as JestAggregatedResult;\n if (!j || !Array.isArray(j.testResults)) {\n throw new Error('Unexpected Jest JSON shape');\n }\n return {\n startTime: Number(j.startTime ?? Date.now()),\n testResults: j.testResults.map((testFileResult) => ({\n testFilePath: testFileResult.testFilePath || testFileResult.name || '',\n status: testFileResult.status,\n failureMessage: testFileResult.failureMessage || '',\n failureDetails: testFileResult.failureDetails ?? [],\n testResults: (testFileResult.assertionResults || []).map((assertion) => ({\n title: assertion.title,\n fullName:\n assertion.fullName || [...(assertion.ancestorTitles || []), assertion.title].join(' '),\n status: assertion.status,\n duration: assertion.duration || 0,\n location: assertion.location ?? null,\n failureMessages: assertion.failureMessages || [],\n })),\n })),\n aggregated: {\n numTotalTestSuites: j.numTotalTestSuites,\n numPassedTestSuites: j.numPassedTestSuites,\n numFailedTestSuites: j.numFailedTestSuites,\n numTotalTests: j.numTotalTests,\n numPassedTests: j.numPassedTests,\n numFailedTests: j.numFailedTests,\n numPendingTests: j.numPendingTests,\n numTodoTests: j.numTodoTests,\n startTime: j.startTime,\n success: j.success,\n },\n };\n}\n\nconst vitestFooter = (\n agg: BridgeJSON['aggregated'],\n _startedAt?: number,\n durationMs?: number,\n): string => {\n const files = [\n agg.numFailedTestSuites ? colorTokens.fail(`${agg.numFailedTestSuites} failed`) : '',\n agg.numPassedTestSuites ? colorTokens.pass(`${agg.numPassedTestSuites} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const tests = [\n agg.numFailedTests ? colorTokens.fail(`${agg.numFailedTests} failed`) : '',\n agg.numPassedTests ? colorTokens.pass(`${agg.numPassedTests} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n agg.numTodoTests ? colorTokens.todo(`${agg.numTodoTests} todo`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const durMs =\n typeof durationMs === 'number'\n ? durationMs\n : typeof agg.runTimeMs === 'number'\n ? agg.runTimeMs\n : undefined;\n const time = durMs != null ? `${Math.max(0, Math.round(durMs))}ms` : '';\n const thread = ansi.dim('(in thread 0ms, 0.00%)');\n\n return [\n `${ansi.bold('Test Files')} ${files} ${ansi.dim(`(${agg.numTotalTestSuites})`)}`,\n `${ansi.bold('Tests')} ${tests} ${ansi.dim(`(${agg.numTotalTests})`)}`,\n `${ansi.bold('Time')} ${time} ${thread}`,\n ].join('\\n');\n};\n\nexport function renderVitestFromJestJSON(\n data: BridgeJSON,\n opts?: { cwd?: string; editorCmd?: string },\n): string {\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const ctx: BuildCtx = { projectHint, editorCmd: opts?.editorCmd, showStacks: true };\n const out: string[] = [];\n // Top RUN line\n out.push(renderRunLine(cwd));\n out.push('');\n for (const file of data.testResults) {\n const rel = file.testFilePath.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n const failed = file.testResults.filter((assertion) => assertion.status === 'failed');\n // Per-file overview list\n out.push(...buildPerFileOverview(rel, file.testResults));\n // File header block with PASS/FAIL badge\n out.push(buildFileBadgeLine(rel, failed.length));\n // Only render file-level failure when there are NO per-assertion failures\n if (file.failureMessage && failed.length === 0) {\n const lines = file.failureMessage.split(/\\r?\\n/);\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...lines, ...details.stacks]);\n const synthLoc = deepestProjectLoc(mergedForStack, projectHint);\n out.push(...buildCodeFrameSection(lines, ctx, synthLoc));\n\n const payload = extractExpectedReceived(file.failureDetails, lines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(lines, details, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n out.push(...buildConsoleSection(file.console ?? null));\n\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(...buildStackSection(mergedForStack, ctx));\n }\n }\n for (const failedAssertion of failed) {\n out.push(drawFailLine());\n const header = `${rel} > ${failedAssertion.fullName}`;\n const messagesArray: string[] =\n failedAssertion.failureMessages.length > 0 ? failedAssertion.failureMessages : [''];\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...messagesArray, ...details.stacks]);\n const deepestLoc = deepestProjectLoc(mergedForStack, projectHint);\n const locLink =\n deepestLoc &&\n (() => {\n const href = preferredEditorHref(deepestLoc.file, deepestLoc.line, opts?.editorCmd);\n const base = `${path.basename(deepestLoc.file)}:${deepestLoc.line}`;\n return osc8(base, href);\n })();\n const headerLine = `${ansi.white(header)}${locLink ? ` ${ansi.dim(`(${locLink})`)}` : ''}`;\n const bullet = (text: string) => `${colorTokens.fail('\u00D7')} ${ansi.white(text)}`;\n out.push(bullet(headerLine));\n const msgLines = messagesArray.join('\\n').split('\\n');\n const assertFallback =\n deepestLoc ||\n (failedAssertion.location && {\n file: file.testFilePath,\n line: failedAssertion.location.line,\n });\n out.push('', ...buildCodeFrameSection(msgLines, ctx, assertFallback), '');\n\n const payload = extractExpectedReceived(file.failureDetails, msgLines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(msgLines, details, ctx, { suppressDiff: hasPretty, stackPreview }),\n );\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(\n ...buildStackSection(\n mergedForStack,\n ctx,\n failedAssertion.location\n ? { file: file.testFilePath, line: failedAssertion.location.line }\n : null,\n ),\n );\n }\n out.push(drawFailLine());\n out.push('');\n }\n }\n // Dashed rule + right-aligned pill\n const failedCount = data.aggregated.numFailedTests;\n out.push(drawRule(colorTokens.failPill(` Failed Tests ${failedCount} `)));\n out.push('');\n const footer = vitestFooter(\n data.aggregated,\n data.aggregated?.startTime ?? data.startTime,\n data.aggregated?.runTimeMs,\n );\n return `${out.join('\\n')}\\n${footer}`;\n}\n", "/* eslint-disable no-continue */\n/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport * as fsSync from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as fs from \"node:fs/promises\";\n\nimport * as LibReport from \"istanbul-lib-report\";\nimport * as Reports from \"istanbul-reports\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runExitCode, runText, runWithCapture } from \"./_exec\";\nimport { deriveArgs } from \"./args\";\nimport {\n findRepoRoot,\n argsForDiscovery,\n discoverJestResilient,\n filterCandidatesForProject,\n decideShouldRunJest,\n} from \"./discovery\";\nimport { readCoverageJson, filterCoverageMap } from \"./coverage-core\";\nimport {\n printPerFileCompositeTables,\n printCompactCoverage,\n printDetailedCoverage,\n} from \"./coverage-print\";\nimport {\n JEST_BRIDGE_REPORTER_SOURCE,\n renderVitestFromJestJSON,\n coerceJestJsonToBridge,\n formatJestOutputVitest,\n} from \"./jest-bridge\";\nimport { stripAnsiSimple } from \"./stacks\";\nimport { tintPct } from \"./bars\";\nimport { selectDirectTestsForProduction } from \"./graph-distance\";\n\nconst jestBin = \"./node_modules/.bin/jest\";\nconst babelNodeBin = \"./node_modules/.bin/babel-node\";\nconst requireCjs = createRequire(import.meta.url);\n\nexport const registerSignalHandlersOnce = () => {\n let handled = false;\n const on = (sig: NodeJS.Signals) => {\n if (handled) {\n return;\n }\n handled = true;\n process.stdout.write(`\\nReceived ${sig}, exiting...\\n`);\n process.exit(130);\n };\n process.once(\"SIGINT\", on);\n process.once(\"SIGTERM\", on);\n};\n\nconst isDebug = (): boolean =>\n Boolean(\n (process.env as unknown as { TEST_CLI_DEBUG?: string }).TEST_CLI_DEBUG\n );\n\nexport const mergeLcov = async (): Promise<void> => {\n const jestLcovPath = \"coverage/jest/lcov.info\";\n const vitestLcovPath = \"coverage/vitest/lcov.info\";\n const mergedOutPath = \"coverage/lcov.info\";\n const readOrEmpty = async (filePath: string) => {\n try {\n return await (\n await import(\"node:fs/promises\")\n ).readFile(filePath, \"utf8\");\n } catch {\n return \"\";\n }\n };\n let vitestContent = \"\";\n let jestContent = \"\";\n try {\n vitestContent = await readOrEmpty(vitestLcovPath);\n } catch (readVitestError) {\n if (isDebug()) {\n console.info(`read vitest lcov failed: ${String(readVitestError)}`);\n }\n }\n try {\n jestContent = await readOrEmpty(jestLcovPath);\n } catch (readJestError) {\n if (isDebug()) {\n console.info(`read jest lcov failed: ${String(readJestError)}`);\n }\n }\n if (!vitestContent && !jestContent) {\n if (isDebug()) {\n console.info(\"No coverage outputs found to merge.\");\n }\n return;\n }\n const merged = [vitestContent.trim(), jestContent.trim()]\n .filter(Boolean)\n .join(\"\\n\");\n if (merged.length > 0) {\n await (\n await import(\"node:fs/promises\")\n ).mkdir(\"coverage\", { recursive: true });\n await (\n await import(\"node:fs/promises\")\n ).writeFile(mergedOutPath, `${merged}\\n`, \"utf8\");\n if (isDebug()) {\n console.info(`Merged coverage written to ${mergedOutPath}`);\n }\n } else if (isDebug()) {\n console.info(\"Coverage files existed but were empty; nothing to merge.\");\n }\n};\n\nexport const emitMergedCoverage = async (\n ui: \"jest\" | \"both\",\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly workspaceRoot?: string;\n readonly editorCmd?: string;\n readonly coverageDetail?: number | \"all\" | \"auto\";\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: \"compact\" | \"full\" | \"auto\";\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n readonly executedTests?: readonly string[];\n }\n): Promise<void> => {\n const jestJson = path.join(\"coverage\", \"jest\", \"coverage-final.json\");\n const jSize = fsSync.existsSync(jestJson)\n ? fsSync.statSync(jestJson).size\n : -1;\n const jestSizeLabel = jSize >= 0 ? `${jSize} bytes` : \"missing\";\n if (isDebug()) {\n console.info(`Coverage JSON probe \u2192 jest: ${jestSizeLabel}`);\n }\n const jestData = await readCoverageJson(jestJson);\n const jestFilesCount = Object.keys(jestData).length;\n if (isDebug()) {\n console.info(`Decoded coverage entries \u2192 jest: ${jestFilesCount}`);\n }\n const { createCoverageMap } = requireCjs(\n \"istanbul-lib-coverage\"\n ) as typeof import(\"istanbul-lib-coverage\");\n const map = createCoverageMap({});\n if (jestFilesCount > 0) {\n try {\n map.merge(jestData);\n } catch (mergeJestError) {\n console.warn(\n `Failed merging jest coverage JSON: ${String(mergeJestError)}`\n );\n }\n }\n if (map.files().length === 0) {\n if (isDebug()) {\n console.info(\n \"No JSON coverage to merge; skipping merged coverage print.\"\n );\n }\n return;\n }\n\n const repoRoot = opts.workspaceRoot ?? (await findRepoRoot());\n\n let filteredMap = filterCoverageMap(map, {\n includes: opts.includeGlobs,\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.warn(\n \"Coverage filters matched 0 files; retrying with include=**/* to avoid empty output.\"\n );\n filteredMap = filterCoverageMap(map, {\n includes: [\"**/*\"],\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.info(\"Coverage present but still no matches; skipping print.\");\n return;\n }\n }\n\n let changedFilesOutput: readonly string[] = [];\n\n try {\n const out = await runText(\n \"git\",\n [\"diff\", \"--name-only\", \"--diff-filter=ACMRTUXB\", \"HEAD\"],\n {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n }\n );\n changedFilesOutput = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((filePathText) => filePathText.replace(/\\\\/g, \"/\"));\n } catch (gitError) {\n console.warn(\n `git diff failed when deriving changed files: ${String(gitError)}`\n );\n }\n\n await printPerFileCompositeTables({\n map: filteredMap,\n root: repoRoot,\n pageFit: opts.coveragePageFit ?? Boolean(process.stdout.isTTY),\n ...(opts.coverageMaxHotspots !== undefined\n ? { maxHotspots: opts.coverageMaxHotspots }\n : {}),\n selectionPaths: opts.selectionPaths ?? [],\n changedFiles: changedFilesOutput,\n executedTests: opts.executedTests ?? [],\n });\n\n const context = LibReport.createContext({\n dir: path.resolve(\"coverage\", \"merged\"),\n coverageMap: filteredMap,\n defaultSummarizer: \"nested\",\n });\n\n const reporters =\n ui === \"jest\"\n ? [Reports.create(\"text\", { file: \"coverage.txt\" })]\n : [\n Reports.create(\"text\", { file: \"coverage.txt\" }),\n Reports.create(\"text-summary\", { file: \"coverage-summary.txt\" }),\n ];\n\n const colorizeIstanbulLine = (lineText: string): string => {\n const separator = /^[-=\\s]+$/;\n if (separator.test(lineText.trim())) {\n return lineText;\n }\n const headerLike = /\\bFile\\b\\s*\\|\\s*%\\s*Stmts\\b/.test(lineText);\n if (headerLike) {\n return lineText;\n }\n if (/^\\s*(Statements|Branches|Functions|Lines)\\s*:/.test(lineText)) {\n // Color the label, percentage, and the raw counts in parens, e.g. ( 822/1816 )\n const updated = lineText.replace(\n /(Statements|Branches|Functions|Lines)(\\s*:\\s*)(\\d+(?:\\.\\d+)?)(%)/,\n (_m, label, sep, num, pct) => {\n const colorize = tintPct(Number(num));\n return `${colorize(label)}${sep}${colorize(`${num}${pct}`)}`;\n }\n );\n return updated.replace(\n /\\(\\s*(\\d+)\\s*\\/\\s*(\\d+)\\s*\\)/,\n (_match, coveredText, totalText) => {\n const percent = (() => {\n const totalCount = Number(totalText);\n const coveredCount = Number(coveredText);\n return totalCount > 0 ? (coveredCount / totalCount) * 100 : 0;\n })();\n const colorize = tintPct(percent);\n return colorize(`( ${coveredText}/${totalText} )`);\n }\n );\n }\n if (lineText.includes(\"|\")) {\n const parts = lineText.split(\"|\");\n if (parts.length >= 2) {\n // Compute row weight from numeric percent columns\n const numericValues: number[] = [];\n for (let index = 1; index < parts.length - 1; index += 1) {\n const value = Number((parts[index] ?? \"\").trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n numericValues.push(value);\n }\n }\n const rowWeight = numericValues.length\n ? Math.min(...numericValues)\n : undefined;\n // Tint each numeric % column\n for (let index = 1; index < parts.length - 1; index += 1) {\n const raw = parts[index] ?? \"\";\n const value = Number(raw.trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n parts[index] = tintPct(value)(raw);\n }\n }\n // Tint the File/Group label and Uncovered column based on row weight\n if (rowWeight !== undefined) {\n parts[0] = tintPct(rowWeight)(parts[0] ?? \"\");\n const lastIndex = parts.length - 1;\n if (lastIndex >= 1) {\n parts[lastIndex] = tintPct(rowWeight)(parts[lastIndex] ?? \"\");\n }\n }\n return parts.join(\"|\");\n }\n }\n return lineText;\n };\n for (const reporter of reporters) {\n reporter.execute(context);\n }\n const textPath = path.resolve(\"coverage\", \"merged\", \"coverage.txt\");\n const summaryPath = path.resolve(\n \"coverage\",\n \"merged\",\n \"coverage-summary.txt\"\n );\n const filesToPrint: string[] = [];\n if (fsSync.existsSync(textPath)) {\n filesToPrint.push(textPath);\n }\n if (fsSync.existsSync(summaryPath)) {\n filesToPrint.push(summaryPath);\n }\n if (filesToPrint.length > 0) {\n for (const filePath of filesToPrint) {\n try {\n const raw = fsSync.readFileSync(filePath, \"utf8\");\n const colored = raw.split(/\\r?\\n/).map(colorizeIstanbulLine).join(\"\\n\");\n process.stdout.write(colored.endsWith(\"\\n\") ? colored : `${colored}\\n`);\n } catch {\n // fall back to raw printing\n try {\n const raw = fsSync.readFileSync(filePath, \"utf8\");\n process.stdout.write(raw.endsWith(\"\\n\") ? raw : `${raw}\\n`);\n } catch {\n /* ignore */\n }\n }\n }\n } else {\n // Fallback: no files created by reporter; run standard reporters to stdout (uncolored)\n const stdoutReporters =\n ui === \"jest\"\n ? [Reports.create(\"text\")]\n : [Reports.create(\"text\"), Reports.create(\"text-summary\")];\n for (const reporter of stdoutReporters) {\n reporter.execute(context);\n }\n }\n\n // Optional deep-dive per-file coverage: only when explicitly requested (not on 'auto')\n const modeResolved: \"compact\" | \"full\" =\n opts.coverageMode && opts.coverageMode !== \"auto\"\n ? opts.coverageMode\n : \"full\";\n const shouldDeepDive =\n opts.coverageDetail !== undefined && opts.coverageDetail !== \"auto\";\n if (shouldDeepDive) {\n if (modeResolved === \"compact\") {\n await printCompactCoverage({\n map: filteredMap,\n root: repoRoot,\n ...(opts.coverageMaxFiles !== undefined\n ? { maxFiles: opts.coverageMaxFiles }\n : {}),\n ...(opts.coverageMaxHotspots !== undefined\n ? { maxHotspots: opts.coverageMaxHotspots }\n : {}),\n ...(opts.coveragePageFit !== undefined\n ? { pageFit: opts.coveragePageFit }\n : {}),\n });\n } else {\n const limit =\n opts.coverageDetail === \"all\" ? \"all\" : (opts.coverageDetail as number);\n await printDetailedCoverage({\n map: filteredMap,\n root: repoRoot,\n limitPerFile: limit,\n showCode: opts.coverageShowCode ?? Boolean(process.stdout.isTTY),\n });\n }\n }\n};\n\nexport const runJestBootstrap = async (): Promise<void> => {\n const npmCmd = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n const code = await runExitCode(npmCmd, [\"run\", \"-s\", \"test:jest:bootstrap\"], {\n env: safeEnv(process.env, {\n NODE_ENV: \"test\",\n }) as unknown as NodeJS.ProcessEnv,\n });\n if (Number(code) !== 0) {\n throw new Error(\"Jest DB bootstrap failed\");\n }\n};\n\nexport const program = async (): Promise<void> => {\n registerSignalHandlersOnce();\n const argv = process.argv.slice(2);\n const {\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n editorCmd,\n workspaceRoot,\n coverageDetail,\n coverageShowCode,\n coverageMode,\n coverageMaxFiles: coverageMaxFilesArg,\n coverageMaxHotspots: coverageMaxHotspotsArg,\n coveragePageFit,\n } = deriveArgs(argv);\n console.info(\n `Selection \u2192 specified=${selectionSpecified} paths=${selectionPaths.length}`\n );\n const { jest } = argsForDiscovery([\"run\"], jestArgs);\n const selectionLooksLikeTest = selectionPaths.some(\n (pathText) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText)\n );\n const selectionLooksLikePath = selectionPaths.some(\n (pathText) => /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText)\n );\n const selectionHasPaths = selectionPaths.length > 0;\n const repoRootForDiscovery = workspaceRoot ?? (await findRepoRoot());\n\n // Expand production selections from bare filenames or repo-root-relative suffixes\n const expandProductionSelections = async (\n tokens: readonly string[],\n repoRoot: string\n ): Promise<readonly string[]> => {\n const results = new Set<string>();\n for (const raw of tokens) {\n const token = String(raw).trim();\n if (!token) {\n continue;\n }\n const isAbs = path.isAbsolute(token);\n const looksLikeRelPath = /[\\\\/]/.test(token);\n let candidateFromRoot: string | undefined;\n if (token.startsWith(\"/\")) {\n candidateFromRoot = path.join(repoRoot, token.slice(1));\n } else if (looksLikeRelPath) {\n candidateFromRoot = path.join(repoRoot, token);\n } else {\n candidateFromRoot = undefined;\n }\n const tryPushIfProd = (absPath: string) => {\n const norm = path.resolve(absPath).replace(/\\\\/g, \"/\");\n const isTest =\n /(^|\\/)tests?\\//i.test(norm) || /\\.(test|spec)\\.[tj]sx?$/i.test(norm);\n if (!isTest && fsSync.existsSync(norm)) {\n results.add(norm);\n }\n };\n if (isAbs && fsSync.existsSync(token)) {\n tryPushIfProd(token);\n continue;\n }\n if (candidateFromRoot && fsSync.existsSync(candidateFromRoot)) {\n tryPushIfProd(candidateFromRoot);\n continue;\n }\n // Use ripgrep to find files whose path ends with the token (filename or suffix)\n try {\n // eslint-disable-next-line no-await-in-loop\n const out = await runText(\"rg\", [\"--files\", \"-g\", `**/${token}`], {\n cwd: repoRoot,\n env: safeEnv(process.env, {\n CI: \"1\",\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 4000,\n });\n const matches = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((rel) => path.resolve(repoRoot, rel).replace(/\\\\/g, \"/\"))\n .filter(\n (abs) =>\n !abs.includes(\"/node_modules/\") &&\n !abs.includes(\"/coverage/\") &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs)\n );\n matches.forEach((abs) => results.add(abs));\n } catch {\n // ignore\n }\n }\n return Array.from(results);\n };\n\n const initialProdSelections = selectionPaths.filter(\n (pathText) =>\n (/[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText)) &&\n !/(^|\\/)tests?\\//i.test(pathText) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(pathText)\n );\n const expandedProdSelections = initialProdSelections.length\n ? initialProdSelections\n : await expandProductionSelections(selectionPaths, repoRootForDiscovery);\n const selectionIncludesProdPaths = expandedProdSelections.length > 0;\n console.info(\n `Selection classify \u2192 looksLikePath=${selectionLooksLikePath} looksLikeTest=${selectionLooksLikeTest} prodPaths=${selectionIncludesProdPaths}`\n );\n const stripPathTokens = (args: readonly string[]) =>\n args.filter((token) => !selectionPaths.includes(token));\n const jestDiscoveryArgs = selectionIncludesProdPaths\n ? stripPathTokens(jest)\n : jest;\n\n const projectConfigs: string[] = [];\n try {\n const baseCfg = path.resolve(\"jest.config.js\");\n const tsCfg = path.resolve(\"jest.ts.config.js\");\n if (fsSync.existsSync(baseCfg)) {\n projectConfigs.push(baseCfg);\n }\n if (fsSync.existsSync(tsCfg)) {\n projectConfigs.push(tsCfg);\n }\n } catch (err) {\n console.warn(`Failed to discover Jest project configs: ${String(err)}`);\n }\n\n const perProjectFiles = new Map<string, string[]>();\n if (selectionIncludesProdPaths) {\n console.info(\n `Discovering (rg-first) \u2192 related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`\n );\n const prodSelections = expandedProdSelections;\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const allTests = await discoverJestResilient(\n [...jestDiscoveryArgs, \"--config\", cfg],\n {\n cwd: cfgCwd,\n }\n );\n let directPerProject: readonly string[] = [];\n try {\n // eslint-disable-next-line no-await-in-loop\n directPerProject = await selectDirectTestsForProduction({\n rootDir: repoRootForDiscovery,\n testFiles: allTests,\n productionFiles: prodSelections,\n });\n } catch (err) {\n if (isDebug()) {\n console.warn(\n `direct selection failed for project ${path.basename(\n cfg\n )}: ${String(err)}`\n );\n }\n }\n perProjectFiles.set(cfg, directPerProject as string[]);\n }\n } else {\n console.info(\n `Discovering \u2192 jestArgs=${jestDiscoveryArgs.join(\n \" \"\n )} | related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`\n );\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const files = await discoverJestResilient(\n [...jestDiscoveryArgs, \"--config\", cfg],\n {\n cwd: cfgCwd,\n }\n );\n perProjectFiles.set(cfg, files as string[]);\n }\n }\n\n const perProjectFiltered = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n const files = perProjectFiles.get(cfg) ?? [];\n const selectionTestPaths = selectionPaths.filter(\n (pathToken) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathToken) ||\n /(^|\\/)tests?\\//i.test(pathToken)\n );\n const candidates =\n selectionHasPaths && selectionLooksLikeTest ? selectionTestPaths : files;\n const absFiles = candidates\n .map((candidatePath) =>\n path.isAbsolute(candidatePath)\n ? candidatePath\n : path.join(repoRootForDiscovery, candidatePath)\n )\n .map((absolutePath) => absolutePath.replace(/\\\\/g, \"/\"));\n // eslint-disable-next-line no-await-in-loop\n const onlyOwned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n absFiles,\n path.dirname(cfg)\n );\n perProjectFiltered.set(cfg, onlyOwned as string[]);\n }\n\n let jestFiles = Array.from(perProjectFiltered.values()).flat();\n console.info(\n `Discovery results \u2192 jest=${jestFiles.length} (projects=${projectConfigs.length})`\n );\n\n const looksLikeTestPath = (candidatePath: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(candidatePath) ||\n /(^|\\/)tests?\\//i.test(candidatePath);\n const prodSelections = expandedProdSelections;\n\n let effectiveJestFiles = jestFiles.slice();\n if (selectionHasPaths && prodSelections.length > 0) {\n console.info(\n `rg related \u2192 prodSelections=${prodSelections.length} (starting)`\n );\n const repoRootForRefinement = workspaceRoot ?? (await findRepoRoot());\n const selectionKey = prodSelections\n .map((absPath) =>\n path.relative(repoRootForRefinement, absPath).replace(/\\\\/g, \"/\")\n )\n .sort((a, b) => a.localeCompare(b))\n .join(\"|\");\n const { cachedRelated, findRelatedTestsFast, DEFAULT_TEST_GLOBS } =\n await import(\"./fast-related\");\n const { DEFAULT_EXCLUDE } = await import(\"./args\");\n const rgMatches = await cachedRelated({\n repoRoot: repoRootForRefinement,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot: repoRootForRefinement,\n productionPaths: prodSelections,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n console.info(`rg candidates \u2192 count=${rgMatches.length}`);\n console.info(\"rg candidates \u2192\");\n const normalizedCandidates = rgMatches.map((candidatePath) =>\n candidatePath.replace(/\\\\/g, \"/\")\n );\n normalizedCandidates.forEach((candidatePath) =>\n console.info(` - ${candidatePath}`)\n );\n const rgSet = new Set(\n rgMatches.map((candidate) => candidate.replace(/\\\\/g, \"/\"))\n );\n if (rgSet.size > 0) {\n if (selectionIncludesProdPaths) {\n // Overwrite jestFiles with rg candidates and re-filter per project ownership\n const rgCandidates = Array.from(rgSet);\n const perProjectFromRg = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n rgCandidates,\n path.dirname(cfg)\n );\n perProjectFromRg.set(cfg, owned as string[]);\n }\n // If ownership filtering lost all candidates,\n // run a content-based import scan on rg candidates to keep only relevant tests\n let totalOwned = Array.from(perProjectFromRg.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg2, owned] of perProjectFromRg.entries()) {\n perProjectFiltered.set(cfg2, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n } else {\n const repoRootForScan = repoRootForDiscovery;\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRootForScan, abs).replace(/\\\\/g, \"/\");\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, \"\");\n const base = path.basename(withoutExt);\n const segs = withoutExt.split(\"/\");\n const tail2 = segs.slice(-2).join(\"/\");\n return Array.from(\n new Set([withoutExt, base, tail2].filter(Boolean))\n );\n };\n const seeds = Array.from(new Set(prodSelections.flatMap(toSeeds)));\n const includesSeed = (text: string) =>\n seeds.some((seed) => text.includes(seed));\n const tryRead = (filePath: string): string => {\n try {\n return fsSync.readFileSync(filePath, \"utf8\");\n } catch {\n return \"\";\n }\n };\n const resolveLocalImport = (\n fromFile: string,\n spec: string\n ): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const cand = path.resolve(baseDir, spec);\n const exts = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\"];\n for (const ext of exts) {\n const full = ext ? `${cand}${ext}` : cand;\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n // index files\n for (const ext of exts) {\n const full = path.join(cand, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n return undefined;\n };\n const importSpecs = (body: string): string[] => {\n const out: string[] = [];\n const importRe = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRe = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n let importMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((importMatch = importRe.exec(body))) {\n out.push(importMatch[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n let requireMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((requireMatch = requireRe.exec(body))) {\n out.push(requireMatch[1]!);\n }\n return out;\n };\n const keptCandidates: string[] = [];\n for (const cand of rgCandidates) {\n const body = tryRead(cand);\n if (includesSeed(body)) {\n keptCandidates.push(cand);\n continue;\n }\n const specs = importSpecs(body).filter(\n (sp) => sp.startsWith(\".\") || sp.startsWith(\"/\")\n );\n let kept = false;\n for (const spec of specs) {\n const target = resolveLocalImport(cand, spec);\n if (!target) {\n continue;\n }\n const tb = tryRead(target);\n if (includesSeed(tb)) {\n kept = true;\n break;\n }\n }\n if (kept) {\n keptCandidates.push(cand);\n }\n }\n if (keptCandidates.length > 0) {\n const perProjectFromScan = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n keptCandidates,\n path.dirname(cfg)\n );\n perProjectFromScan.set(cfg, owned as string[]);\n }\n totalOwned = Array.from(perProjectFromScan.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg, owned] of perProjectFromScan.entries()) {\n perProjectFiltered.set(cfg, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n }\n }\n }\n // If still zero after scan, leave as zero to trigger jest-list fallback later\n // and do NOT assign all candidates to an arbitrary project.\n } else {\n const narrowedJest = effectiveJestFiles.filter((candidate) =>\n rgSet.has(candidate.replace(/\\\\/g, \"/\"))\n );\n if (narrowedJest.length > 0) {\n effectiveJestFiles = narrowedJest;\n }\n }\n }\n if (effectiveJestFiles.length === 0) {\n const repoRoot = repoRootForRefinement;\n const seeds = prodSelections\n .map((abs) =>\n path\n .relative(repoRoot, abs)\n .replace(/\\\\/g, \"/\")\n .replace(/\\.(m?[tj]sx?)$/i, \"\")\n )\n .flatMap((rel) => {\n const base = path.basename(rel);\n const segments = rel.split(\"/\");\n return Array.from(\n new Set([rel, base, segments.slice(-2).join(\"/\")].filter(Boolean))\n );\n });\n\n const includesSeed = (text: string) =>\n seeds.some((seed) => text.includes(seed));\n const tryReadFile = async (absPath: string): Promise<string> => {\n try {\n return await fs.readFile(absPath, \"utf8\");\n } catch {\n return \"\";\n }\n };\n const resolveLocalImport = (\n fromFile: string,\n spec: string\n ): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const candidate = path.resolve(baseDir, spec);\n const extensions = [\n \"\",\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n ];\n for (const ext of extensions) {\n const fullPath = ext ? `${candidate}${ext}` : candidate;\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n for (const ext of extensions) {\n const fullPath = path.join(candidate, `index${ext}`);\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n return undefined;\n };\n const importOrExportSpecs = (body: string): string[] => {\n const results: string[] = [];\n const importRegex = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRegex = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n const exportFromRegex =\n /export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"];?/g;\n let match: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((match = importRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = requireRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = exportFromRegex.exec(body))) {\n results.push(match[1]!);\n }\n return results;\n };\n\n const union = Array.from(new Set<string>(jestFiles));\n const keep = new Set<string>();\n const visitedBodyCache = new Map<string, string>();\n const specCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n\n const getBody = async (absPath: string): Promise<string> => {\n const existing = visitedBodyCache.get(absPath);\n if (existing !== undefined) {\n return existing;\n }\n const content = await tryReadFile(absPath);\n visitedBodyCache.set(absPath, content);\n return content;\n };\n\n const getSpecs = async (absPath: string): Promise<readonly string[]> => {\n const cached = specCache.get(absPath);\n if (cached !== undefined) {\n return cached;\n }\n const body = await getBody(absPath);\n const specs = importOrExportSpecs(body);\n specCache.set(absPath, specs);\n return specs;\n };\n\n const resolveSpec = (\n fromFile: string,\n spec: string\n ): string | undefined => {\n const key = `${fromFile}|${spec}`;\n if (resolutionCache.has(key)) {\n return resolutionCache.get(key);\n }\n const resolved =\n spec.startsWith(\".\") || spec.startsWith(\"/\")\n ? resolveLocalImport(fromFile, spec)\n : undefined;\n resolutionCache.set(key, resolved);\n return resolved;\n };\n\n const MAX_DEPTH = 5;\n const seen = new Set<string>();\n const matchesTransitively = async (\n absTestPath: string,\n depth: number\n ): Promise<boolean> => {\n if (depth > MAX_DEPTH) {\n return false;\n }\n const cacheKey = `${absTestPath}@${depth}`;\n if (seen.has(cacheKey)) {\n return false;\n }\n seen.add(cacheKey);\n const body = await getBody(absTestPath);\n if (includesSeed(body)) {\n return true;\n }\n const specs = await getSpecs(absTestPath);\n for (const spec of specs) {\n const target = resolveSpec(absTestPath, spec);\n if (!target) {\n continue;\n }\n // eslint-disable-next-line no-await-in-loop\n const targetBody = await getBody(target);\n if (includesSeed(targetBody)) {\n return true;\n }\n // eslint-disable-next-line no-await-in-loop\n if (await matchesTransitively(target, depth + 1)) {\n return true;\n }\n }\n return false;\n };\n\n const concurrency = 16;\n let scanIndex = 0;\n const workers: Promise<void>[] = [];\n for (let workerIndex = 0; workerIndex < concurrency; workerIndex += 1) {\n workers.push(\n // eslint-disable-next-line no-loop-func\n (async () => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentIndex = scanIndex;\n if (currentIndex >= union.length) {\n break;\n }\n scanIndex += 1;\n const candidate = union[currentIndex]!;\n // eslint-disable-next-line no-await-in-loop\n const ok = await matchesTransitively(candidate, 0);\n if (ok) {\n keep.add(candidate);\n }\n }\n })()\n );\n }\n await Promise.all(workers);\n\n const jestKept = jestFiles\n .filter((candidate) => keep.has(candidate))\n .sort((left, right) => left.localeCompare(right));\n if (jestKept.length) {\n effectiveJestFiles = jestKept;\n }\n console.info(\n `fallback refine (transitive) \u2192 jest=${effectiveJestFiles.length}`\n );\n }\n }\n\n const jestDecision = decideShouldRunJest([], effectiveJestFiles, {\n selectionSpecified,\n selectionPaths,\n });\n const { shouldRunJest } = jestDecision;\n const jestCount = effectiveJestFiles.length;\n const sharePct = Math.round(jestDecision.share * 100);\n const msg = shouldRunJest\n ? `Jest selected (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`\n : `Skipping Jest (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`;\n console.info(`Discovery \u2192 jest: ${jestCount}. ${msg}`);\n\n if (!shouldRunJest) {\n console.warn(\n \"No matching tests were discovered for either Vitest or Jest.\"\n );\n console.info(\n `Jest args: ${[...jestDiscoveryArgs, \"--listTests\"].join(\" \")}`\n );\n console.info(\n \"Tip: check your -t/--testNamePattern and file path; Jest lists files selected by your patterns.\"\n );\n process.exit(1);\n return;\n }\n\n console.info(\n `Run plan \u2192 Jest maybe=${shouldRunJest} (projects=${projectConfigs.length})`\n );\n let jestExitCode = 0;\n const executedTestFilesSet = new Set<string>();\n if (shouldRunJest) {\n console.info(\"Starting Jest (no Vitest targets)\u2026\");\n await runJestBootstrap();\n const jestRunArgs = selectionIncludesProdPaths\n ? stripPathTokens(jestArgs)\n : jestArgs;\n const projectsToRun = projectConfigs.filter(\n (cfg) => (perProjectFiltered.get(cfg) ?? []).length > 0\n );\n const totalProjectsToRun = projectsToRun.length;\n const stripFooter = (text: string): string => {\n const lines = text.split(\"\\n\");\n const idx = lines.findIndex((ln) =>\n /^Test Files\\s/.test(stripAnsiSimple(ln))\n );\n return idx >= 0 ? lines.slice(0, idx).join(\"\\n\").trimEnd() : text;\n };\n for (let projIndex = 0; projIndex < projectsToRun.length; projIndex += 1) {\n const cfg = projectsToRun[projIndex]!;\n const isLastProject = projIndex === totalProjectsToRun - 1;\n const files = perProjectFiltered.get(cfg) ?? [];\n if (files.length === 0) {\n console.info(\n `Project ${path.basename(\n cfg\n )}: 0 matching tests after filter; skipping.`\n );\n // eslint-disable-next-line no-continue\n continue;\n }\n files.forEach((absTestPath) =>\n executedTestFilesSet.add(path.resolve(absTestPath).replace(/\\\\/g, \"/\"))\n );\n const outJson = path.join(\n os.tmpdir(),\n `jest-bridge-${Date.now()}-${Math.random().toString(36).slice(2)}.json`\n );\n const reporterPath = path.resolve(\"scripts/jest-vitest-bridge.cjs\");\n try {\n if (!fsSync.existsSync(reporterPath)) {\n fsSync.mkdirSync(path.dirname(reporterPath), { recursive: true });\n fsSync.writeFileSync(\n reporterPath,\n JEST_BRIDGE_REPORTER_SOURCE,\n \"utf8\"\n );\n }\n } catch (ensureReporterError) {\n console.warn(\n `Unable to ensure jest bridge reporter: ${String(\n ensureReporterError\n )}`\n );\n }\n // eslint-disable-next-line no-await-in-loop\n // Ensure any explicitly selected paths (tests or production files) are included in coverage\n const selectedFilesForCoverage = selectionPaths\n .filter((pathToken) => /[\\\\/]/.test(pathToken))\n // Avoid restricting coverage to test files when a test path is selected\n .filter((pathToken) => !looksLikeTestPath(pathToken))\n .map((pathToken) =>\n path.relative(repoRootForDiscovery, pathToken).replace(/\\\\\\\\/g, \"/\")\n )\n .filter((rel) => rel && !/^\\.+\\//.test(rel))\n .map((rel) => (rel.startsWith(\"./\") ? rel : `./${rel}`));\n const coverageFromArgs: string[] = [];\n for (const relPath of selectedFilesForCoverage) {\n coverageFromArgs.push(\"--collectCoverageFrom\", relPath);\n }\n\n // eslint-disable-next-line no-await-in-loop\n const { code, output } = await runWithCapture(\n babelNodeBin,\n [\n \"--extensions\",\n \".js,.ts\",\n jestBin,\n \"--config\",\n cfg,\n \"--runTestsByPath\",\n \"--reporters\",\n reporterPath,\n \"--silent\",\n \"--colors\",\n \"--json\",\n \"--outputFile\",\n outJson,\n ...jestRunArgs,\n ...coverageFromArgs,\n \"--passWithNoTests\",\n ...files,\n ],\n {\n env: safeEnv(process.env, {\n NODE_ENV: \"test\",\n JEST_BRIDGE_OUT: outJson,\n FORCE_COLOR: \"3\",\n TERM: process.env.TERM || \"xterm-256color\",\n }) as unknown as NodeJS.ProcessEnv,\n }\n );\n let pretty = \"\";\n try {\n const debug = isDebug();\n if (debug) {\n const capturedLen = output.length;\n console.info(`jest captured output length=${capturedLen}`);\n const fileSizeBytes = fsSync.existsSync(outJson)\n ? fsSync.statSync(outJson).size\n : -1;\n console.info(`bridge json @ ${outJson} size=${fileSizeBytes}`);\n }\n const jsonText = fsSync.readFileSync(outJson, \"utf8\");\n const parsed = JSON.parse(jsonText) as unknown;\n const bridge = coerceJestJsonToBridge(parsed);\n pretty = renderVitestFromJestJSON(bridge, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n });\n if (debug) {\n const preview = pretty.split(\"\\n\").slice(0, 3).join(\"\\n\");\n console.info(\n `pretty preview (json):\\n${preview}${\n pretty.includes(\"\\n\") ? \"\\n\u2026\" : \"\"\n }`\n );\n }\n } catch (jsonErr) {\n const debug = isDebug();\n if (debug) {\n console.info(\n \"renderer: fallback to text prettifier (missing/invalid JSON)\"\n );\n console.info(String(jsonErr));\n console.info(\n `fallback: raw output lines=${output.split(/\\r?\\n/).length}`\n );\n }\n const renderOpts = {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n } as const;\n pretty = formatJestOutputVitest(output, renderOpts);\n if (debug) {\n const preview = pretty.split(\"\\n\").slice(0, 3).join(\"\\n\");\n console.info(\n `pretty preview (text):\\n${preview}${\n pretty.includes(\"\\n\") ? \"\\n\u2026\" : \"\"\n }`\n );\n }\n }\n if (!isLastProject) {\n pretty = stripFooter(pretty);\n }\n if (pretty.trim().length > 0) {\n process.stdout.write(pretty.endsWith(\"\\n\") ? pretty : `${pretty}\\n`);\n }\n if (Number(code) !== 0) {\n jestExitCode = code;\n }\n }\n } else {\n console.info(\"Jest run skipped based on selection and thresholds.\");\n }\n\n // If abort-on-failure is requested for coverage, exit immediately after tests when failing\n if (\n collectCoverage &&\n shouldRunJest &&\n coverageAbortOnFailure &&\n jestExitCode !== 0\n ) {\n process.exit(jestExitCode);\n }\n\n if (collectCoverage && shouldRunJest) {\n await mergeLcov();\n const repoRoot = workspaceRoot ?? (await findRepoRoot());\n const mergedOptsBase = {\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n workspaceRoot: repoRoot,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n ...(coverageDetail !== undefined ? { coverageDetail } : {}),\n ...(coverageShowCode !== undefined ? { coverageShowCode } : {}),\n coverageMode,\n ...(coverageMaxFilesArg !== undefined\n ? { coverageMaxFiles: coverageMaxFilesArg }\n : {}),\n ...(coverageMaxHotspotsArg !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsArg }\n : {}),\n coveragePageFit,\n executedTests: Array.from(executedTestFilesSet),\n } as const;\n await emitMergedCoverage(coverageUi, mergedOptsBase);\n }\n\n const finalExitCode = jestExitCode;\n process.exit(finalExitCode);\n};\n"],
5
- "mappings": "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",
6
- "names": ["path", "env", "resolve", "resolve", "path", "uniq", "util", "key", "token", "c", "buffer", "util", "value", "JSON5", "path", "fs", "path", "path", "stat", "babelNodeBin", "jestBin", "fs", "require", "path", "fsSync", "ext", "stem", "hideMiddle", "label", "headRaw", "tailRaw", "extractImportSpecs", "path", "fs", "JSON5", "path", "os", "fsSync", "createRequire", "fs", "createRequire", "createCoverageMap", "prodSelections", "cachedRelated", "findRelatedTestsFast", "DEFAULT_TEST_GLOBS", "DEFAULT_EXCLUDE"]
3
+ "sources": ["../src/lib/args.ts", "../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/fast-related.ts", "../node_modules/picomatch/lib/constants.js", "../node_modules/picomatch/lib/utils.js", "../node_modules/picomatch/lib/scan.js", "../node_modules/picomatch/lib/parse.js", "../node_modules/picomatch/lib/picomatch.js", "../node_modules/picomatch/index.js", "../node_modules/json5/lib/unicode.js", "../node_modules/json5/lib/util.js", "../node_modules/json5/lib/parse.js", "../node_modules/json5/lib/stringify.js", "../node_modules/json5/lib/index.js", "../src/lib/ansi.ts", "../src/lib/paths.ts", "../src/lib/stacks.ts", "../src/lib/colors.ts", "../src/lib/bars.ts", "../src/lib/table.ts", "../src/index.ts", "../src/lib/discovery.ts", "../src/lib/graph-distance.ts", "../src/lib/path-resolver.ts", "../src/lib/coverage-core.ts", "../src/lib/coverage-print.ts", "../src/lib/jest-bridge.ts", "../src/lib/program.ts"],
4
+ "sourcesContent": ["import * as path from 'node:path';\n\nexport type Action =\n | { readonly type: 'coverage'; readonly coverageValue: boolean }\n | { readonly type: 'coverageUi'; readonly value: 'jest' | 'both' }\n | { readonly type: 'coverageAbortOnFailure'; readonly value: boolean }\n | { readonly type: 'jestArg'; readonly value: string }\n | { readonly type: 'jestArgs'; readonly values: readonly string[] }\n | { readonly type: 'vitestArg'; readonly value: string }\n | { readonly type: 'bothArg'; readonly value: string }\n | { readonly type: 'selectionHint' }\n | { readonly type: 'coverageInclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageExclude'; readonly values: readonly string[] }\n | { readonly type: 'coverageEditor'; readonly value: string }\n | { readonly type: 'coverageRoot'; readonly value: string }\n | { readonly type: 'selectionPath'; readonly value: string }\n | { readonly type: 'coverageDetail'; readonly value?: number | 'all' }\n | { readonly type: 'coverageShowCode'; readonly value: boolean }\n | { readonly type: 'coverageMode'; readonly value: 'compact' | 'full' }\n | { readonly type: 'coverageMaxFiles'; readonly value: number }\n | { readonly type: 'coverageMaxHotspots'; readonly value: number }\n | { readonly type: 'coveragePageFit'; readonly value: boolean };\n\nexport const ActionBuilders = {\n coverage: (coverageValue: boolean): Action => ({ type: 'coverage', coverageValue }),\n coverageUi: (value: 'jest' | 'both'): Action => ({ type: 'coverageUi', value }),\n coverageAbortOnFailure: (value: boolean): Action => ({ type: 'coverageAbortOnFailure', value }),\n jestArg: (value: string): Action => ({ type: 'jestArg', value }),\n jestArgs: (values: readonly string[]): Action => ({ type: 'jestArgs', values }),\n vitestArg: (value: string): Action => ({ type: 'vitestArg', value }),\n bothArg: (value: string): Action => ({ type: 'bothArg', value }),\n selectionHint: (): Action => ({ type: 'selectionHint' }),\n coverageInclude: (values: readonly string[]): Action => ({ type: 'coverageInclude', values }),\n coverageExclude: (values: readonly string[]): Action => ({ type: 'coverageExclude', values }),\n coverageEditor: (value: string): Action => ({ type: 'coverageEditor', value }),\n coverageRoot: (value: string): Action => ({ type: 'coverageRoot', value }),\n selectionPath: (value: string): Action => ({ type: 'selectionPath', value }),\n coverageDetail: (value?: number | 'all'): Action =>\n value !== undefined ? { type: 'coverageDetail', value } : { type: 'coverageDetail' },\n coverageShowCode: (value: boolean): Action => ({ type: 'coverageShowCode', value }),\n coverageMode: (value: 'compact' | 'full'): Action => ({ type: 'coverageMode', value }),\n coverageMaxFiles: (value: number): Action => ({ type: 'coverageMaxFiles', value }),\n coverageMaxHotspots: (value: number): Action => ({ type: 'coverageMaxHotspots', value }),\n coveragePageFit: (value: boolean): Action => ({ type: 'coveragePageFit', value }),\n} as const;\n\ntype State = { actions: Action[]; skipNext: boolean };\nexport type Step = readonly [readonly Action[], boolean];\nexport type RuleEnv = { readonly lookahead?: string; readonly jestFlags: ReadonlySet<string> };\ntype Opt<T> = { readonly _tag: 'some'; readonly value: T } | { readonly _tag: 'none' };\nconst Some = <T>(value: T): Opt<T> => ({ _tag: 'some', value });\nconst None: Opt<never> = { _tag: 'none' } as const;\nconst isSome = <T>(opt: Opt<T>): opt is { readonly _tag: 'some'; readonly value: T } =>\n opt._tag === 'some';\n\nconst step = (actions: readonly Action[], skipNext: boolean = false): Step =>\n [actions, skipNext] as const;\n\nexport type Rule = (value: string, env: RuleEnv) => Opt<Step>;\nexport const rule = {\n when:\n (\n predicate: (value: string, env: RuleEnv) => boolean,\n build: (value: string, env: RuleEnv) => Step,\n ): Rule =>\n (value, env) =>\n predicate(value, env) ? Some(build(value, env)) : None,\n eq: (flag: string, build: () => Step): Rule =>\n rule.when(\n (value) => value === flag,\n () => build(),\n ),\n startsWith: (prefix: string, build: (value: string) => Step): Rule =>\n rule.when(\n (value) => value.startsWith(prefix),\n (value) => build(value),\n ),\n inSet: (select: (env: RuleEnv) => ReadonlySet<string>, build: (value: string) => Step): Rule =>\n rule.when(\n (value, env) => select(env).has(value),\n (value) => build(value),\n ),\n withLookahead: (\n lookaheadFlag: string,\n build: (flagToken: string, lookahead: string) => Step,\n ): Rule =>\n rule.when(\n (value, env) =>\n value === lookaheadFlag && typeof env.lookahead === 'string' && env.lookahead.length > 0,\n (value, env) => build(value, env.lookahead!),\n ),\n} as const;\n\nconst STRING_EMPTY = '' as const;\nconst STRING_TRUE = 'true' as const;\nconst STRING_ONE = '1' as const;\nconst INDEX_STEP = 1 as const;\n\nexport const isTruthy = (value: string): boolean =>\n value === STRING_TRUE || value === STRING_ONE || value === STRING_EMPTY;\n\nexport const parseActionsFromTokens = (tokens: readonly string[]): readonly Action[] => {\n const jestOnlyFlags = new Set(['--ci', '--detectOpenHandles', '--forceExit', '--runInBand']);\n\n const parseCoverageUiString = (raw: string): 'jest' | 'both' => {\n const normalized = String(raw).toLowerCase();\n return normalized === 'jest' ? 'jest' : 'both';\n };\n\n const rules: readonly Rule[] = [\n // --coverage (enable), and --coverage=true/false\n rule.eq('--coverage', () => step([ActionBuilders.coverage(true)])),\n rule.startsWith('--coverage=', (value) =>\n step([ActionBuilders.coverage(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()))]),\n ),\n // --coverage.abortOnFailure\n rule.eq('--coverage.abortOnFailure', () => step([ActionBuilders.coverageAbortOnFailure(true)])),\n rule.startsWith('--coverage.abortOnFailure=', (value) =>\n step([\n ActionBuilders.coverageAbortOnFailure(\n isTruthy((value.split('=')[1] ?? '').trim().toLowerCase()),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.abortOnFailure', (_flag, lookahead) =>\n step([ActionBuilders.coverageAbortOnFailure(isTruthy(String(lookahead)))], true),\n ),\n rule.startsWith('--coverage-ui=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.startsWith('--coverageUi=', (value) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(value.split('=')[1] ?? 'both'))]),\n ),\n rule.withLookahead('--coverage-ui', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n rule.withLookahead('--coverageUi', (_flag, lookahead) =>\n step([ActionBuilders.coverageUi(parseCoverageUiString(String(lookahead)))], true),\n ),\n\n rule.eq('--coverage.detail', () => step([ActionBuilders.coverageDetail()])),\n rule.startsWith('--coverage.detail=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)]);\n }),\n rule.withLookahead('--coverage.detail', (_flag, lookahead) => {\n const raw = String(lookahead).trim().toLowerCase();\n const parsed = raw === 'all' ? 'all' : Number.isFinite(Number(raw)) ? Number(raw) : undefined;\n return step([ActionBuilders.coverageDetail(parsed)], true);\n }),\n\n rule.eq('--coverage.showCode', () => step([ActionBuilders.coverageShowCode(true)])),\n rule.startsWith('--coverage.showCode=', (value) => {\n const flagValue = (value.split('=')[1] ?? '').trim().toLowerCase();\n return step([\n ActionBuilders.coverageShowCode(\n flagValue === 'true' || flagValue === '1' || flagValue === '',\n ),\n ]);\n }),\n rule.withLookahead('--coverage.showCode', (_flag, lookahead) =>\n step([ActionBuilders.coverageShowCode(isTruthy(String(lookahead)))], true),\n ),\n\n rule.startsWith('--coverage.mode=', (value) => {\n const raw = (value.split('=')[1] ?? '').trim().toLowerCase();\n const mode = raw === 'compact' ? 'compact' : 'full';\n return step([ActionBuilders.coverageMode(mode)]);\n }),\n rule.withLookahead('--coverage.mode', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageMode(\n String(lookahead).trim().toLowerCase() === 'compact' ? 'compact' : 'full',\n ),\n ],\n true,\n ),\n ),\n rule.eq('--coverage.compact', () => step([ActionBuilders.coverageMode('compact')])),\n\n rule.startsWith('--coverage.maxFiles=', (value) => {\n const maxFilesCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxFilesCount) ? [ActionBuilders.coverageMaxFiles(maxFilesCount)] : [],\n );\n }),\n rule.startsWith('--coverage.maxHotspots=', (value) => {\n const maxHotspotsCount = Number(value.split('=')[1] ?? '');\n return step(\n Number.isFinite(maxHotspotsCount)\n ? [ActionBuilders.coverageMaxHotspots(maxHotspotsCount)]\n : [],\n );\n }),\n rule.eq('--coverage.pageFit', () => step([ActionBuilders.coveragePageFit(true)])),\n rule.startsWith('--coverage.pageFit=', (value) =>\n step([\n ActionBuilders.coveragePageFit(isTruthy((value.split('=')[1] ?? '').trim().toLowerCase())),\n ]),\n ),\n rule.withLookahead('--coverage.pageFit', (_flag, lookahead) =>\n step([ActionBuilders.coveragePageFit(isTruthy(String(lookahead)))], true),\n ),\n\n rule.withLookahead('--testPathPattern', (flag, lookahead) =>\n step([ActionBuilders.jestArgs([flag, lookahead])], true),\n ),\n rule.startsWith('--testPathPattern=', (value) => step([ActionBuilders.jestArg(value)])),\n rule.inSet(\n (env) => env.jestFlags,\n (value) => step([ActionBuilders.jestArg(value)]),\n ),\n\n rule.when(\n (value) => value === '--watch' || value === '-w',\n () => step([ActionBuilders.vitestArg('--watch'), ActionBuilders.jestArg('--watch')]),\n ),\n rule.eq('--watchAll', () => step([ActionBuilders.jestArg('--watchAll')])),\n\n rule.startsWith('--coverage.include=', (value) =>\n step([\n ActionBuilders.coverageInclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.include', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageInclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.exclude=', (value) =>\n step([\n ActionBuilders.coverageExclude(\n (value.split('=')[1] ?? '')\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ]),\n ),\n rule.withLookahead('--coverage.exclude', (_flag, lookahead) =>\n step(\n [\n ActionBuilders.coverageExclude(\n lookahead\n .split(',')\n .map((segment) => segment.trim())\n .filter(Boolean),\n ),\n ],\n true,\n ),\n ),\n rule.startsWith('--coverage.editor=', (value) =>\n step([ActionBuilders.coverageEditor((value.split('=')[1] ?? '').trim())]),\n ),\n rule.startsWith('--coverage.root=', (value) =>\n step([ActionBuilders.coverageRoot((value.split('=')[1] ?? '').trim())]),\n ),\n\n rule.withLookahead('-t', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n rule.withLookahead('--testNamePattern', (flag, lookahead) =>\n step(\n [\n ActionBuilders.bothArg(flag),\n ActionBuilders.bothArg(lookahead),\n ActionBuilders.selectionHint(),\n ],\n true,\n ),\n ),\n ] as const;\n\n const init: State = { actions: [], skipNext: false };\n\n const final = tokens.reduce<State>((state, token, index) => {\n if (state.skipNext) {\n return { actions: state.actions, skipNext: false };\n }\n const tokenValue = token ?? STRING_EMPTY;\n const nextToken = tokens[index + INDEX_STEP];\n let env: RuleEnv = { jestFlags: jestOnlyFlags };\n if (typeof nextToken === 'string' && nextToken.length > 0) {\n env = { jestFlags: jestOnlyFlags, lookahead: nextToken };\n }\n\n const firstMatch = (rs: readonly Rule[], value: string, envForRules: RuleEnv) => {\n for (const ruleFn of rs) {\n const match = ruleFn(value, envForRules);\n if (isSome(match)) {\n return match;\n }\n }\n return None as Opt<Step>;\n };\n\n const matched = firstMatch(rules, tokenValue, env);\n\n const isTestFileToken = (candidate: string) =>\n /\\.(test|spec)\\.[tj]sx?$/.test(candidate) || /(^|\\/)tests?\\//.test(candidate);\n const isPathLike = (candidate: string) =>\n /[\\\\/]/.test(candidate) || /\\.(m?[tj]sx?)$/i.test(candidate);\n\n const [matchedActions, shouldSkipNext] = isSome(matched)\n ? matched.value\n : (() => {\n const base = [ActionBuilders.bothArg(tokenValue)];\n const withSelection =\n isTestFileToken(tokenValue) || isPathLike(tokenValue)\n ? [\n ...base,\n ActionBuilders.selectionHint(),\n ...(isPathLike(tokenValue) ? [ActionBuilders.selectionPath(tokenValue)] : []),\n ]\n : base;\n return step(withSelection);\n })();\n\n return { actions: [...state.actions, ...matchedActions], skipNext: shouldSkipNext };\n }, init);\n\n return final.actions as readonly Action[];\n};\n\nexport type ParsedArgs = {\n readonly vitestArgs: readonly string[];\n readonly jestArgs: readonly string[];\n readonly collectCoverage: boolean;\n readonly coverageUi: 'jest' | 'both';\n readonly coverageAbortOnFailure: boolean;\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode: boolean;\n readonly coverageMode: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit: boolean;\n};\n\ntype Contrib = {\n readonly vitest: readonly string[];\n readonly jest: readonly string[];\n readonly coverage: boolean;\n readonly coverageUi?: ParsedArgs['coverageUi'];\n readonly coverageAbortOnFailure?: boolean;\n readonly selection?: boolean;\n readonly include?: readonly string[];\n readonly exclude?: readonly string[];\n readonly editorCmd?: string;\n readonly workspaceRoot?: string;\n readonly selectionPaths?: readonly string[];\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n};\n\nconst emptyContrib: Contrib = {\n vitest: [],\n jest: [],\n coverage: false,\n coverageDetail: 'auto',\n coverageMode: 'auto',\n};\n\nconst toContrib = (action: Action): Contrib => {\n switch (action.type) {\n case 'coverage':\n return { vitest: [], jest: [], coverage: action.coverageValue };\n case 'coverageUi':\n return { vitest: [], jest: [], coverage: false, coverageUi: action.value };\n case 'coverageAbortOnFailure':\n return { vitest: [], jest: [], coverage: false, coverageAbortOnFailure: action.value };\n case 'jestArgs':\n return { vitest: [], jest: action.values, coverage: false };\n case 'selectionHint':\n return { vitest: [], jest: [], coverage: false, selection: true };\n case 'coverageInclude':\n return { vitest: [], jest: [], coverage: false, include: action.values };\n case 'coverageExclude':\n return { vitest: [], jest: [], coverage: false, exclude: action.values };\n case 'coverageEditor':\n return { vitest: [], jest: [], coverage: false, editorCmd: action.value };\n case 'coverageRoot':\n return { vitest: [], jest: [], coverage: false, workspaceRoot: action.value };\n case 'selectionPath':\n return { vitest: [], jest: [], coverage: false, selectionPaths: [action.value] };\n case 'coverageDetail': {\n const detailValue: Contrib['coverageDetail'] = action.value ?? 'auto';\n return { vitest: [], jest: [], coverage: false, coverageDetail: detailValue };\n }\n case 'coverageShowCode':\n return { vitest: [], jest: [], coverage: false, coverageShowCode: action.value };\n case 'coverageMode':\n return { vitest: [], jest: [], coverage: false, coverageMode: action.value };\n case 'coverageMaxFiles':\n return { vitest: [], jest: [], coverage: false, coverageMaxFiles: action.value };\n case 'coverageMaxHotspots':\n return { vitest: [], jest: [], coverage: false, coverageMaxHotspots: action.value };\n case 'coveragePageFit':\n return { vitest: [], jest: [], coverage: false, coveragePageFit: action.value };\n case 'jestArg':\n return { vitest: [], jest: [action.value], coverage: false };\n case 'vitestArg':\n return { vitest: [action.value], jest: [], coverage: false };\n case 'bothArg':\n return { vitest: [action.value], jest: [action.value], coverage: false };\n default: {\n const neverGuard: never = action;\n return neverGuard;\n }\n }\n};\n\nexport const combineContrib = (left: Contrib, right: Contrib): Contrib => {\n const base: Contrib = {\n vitest: left.vitest.concat(right.vitest),\n jest: left.jest.concat(right.jest),\n coverage: left.coverage || right.coverage,\n include: [...(left.include ?? []), ...(right.include ?? [])],\n exclude: [...(left.exclude ?? []), ...(right.exclude ?? [])],\n selection: Boolean(left.selection || right.selection),\n selectionPaths: [...(left.selectionPaths ?? []), ...(right.selectionPaths ?? [])],\n };\n const next: Contrib = { ...base } as Contrib;\n const editor = right.editorCmd ?? left.editorCmd;\n if (editor !== undefined) {\n (next as unknown as { editorCmd: string }).editorCmd = editor;\n }\n const root = right.workspaceRoot ?? left.workspaceRoot;\n if (root !== undefined) {\n (next as unknown as { workspaceRoot: string }).workspaceRoot = root;\n }\n if (right.coverageUi !== undefined) {\n return { ...next, coverageUi: right.coverageUi } as Contrib;\n }\n if (left.coverageUi !== undefined) {\n return { ...next, coverageUi: left.coverageUi } as Contrib;\n }\n return {\n ...next,\n ...(right.coverageAbortOnFailure !== undefined || left.coverageAbortOnFailure !== undefined\n ? { coverageAbortOnFailure: right.coverageAbortOnFailure ?? left.coverageAbortOnFailure }\n : {}),\n ...(right.coverageDetail !== undefined || left.coverageDetail !== undefined\n ? { coverageDetail: right.coverageDetail ?? left.coverageDetail }\n : {}),\n ...(right.coverageShowCode !== undefined || left.coverageShowCode !== undefined\n ? { coverageShowCode: right.coverageShowCode ?? left.coverageShowCode }\n : {}),\n ...(right.coverageMode !== undefined || left.coverageMode !== undefined\n ? { coverageMode: right.coverageMode ?? left.coverageMode }\n : {}),\n ...(right.coverageMaxFiles !== undefined || left.coverageMaxFiles !== undefined\n ? { coverageMaxFiles: right.coverageMaxFiles ?? left.coverageMaxFiles }\n : {}),\n ...(right.coverageMaxHotspots !== undefined || left.coverageMaxHotspots !== undefined\n ? { coverageMaxHotspots: right.coverageMaxHotspots ?? left.coverageMaxHotspots }\n : {}),\n ...(right.coveragePageFit !== undefined || left.coveragePageFit !== undefined\n ? { coveragePageFit: right.coveragePageFit ?? left.coveragePageFit }\n : {}),\n } as Contrib;\n};\n\nexport const DEFAULT_INCLUDE = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'] as const;\nexport const DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/coverage/**',\n '**/dist/**',\n '**/build/**',\n '**/migrations/**',\n '**/__mocks__/**',\n] as const;\n\nexport const deriveArgs = (argv: readonly string[]): ParsedArgs => {\n const vitestArgs: string[] = ['run'];\n const jestArgs: string[] = ['--detectOpenHandles', '--forceExit', '--runInBand'];\n let collectCoverage = false;\n let coverageUi: ParsedArgs['coverageUi'] = 'both';\n let coverageAbortOnFailure = false;\n let coverageShowCode = Boolean(process.stdout.isTTY);\n let coverageMode: ParsedArgs['coverageMode'] = 'auto';\n const coverageMaxFilesLocalInit: number | undefined = undefined;\n const coverageMaxHotspotsLocalInit: number | undefined = undefined;\n let coverageMaxFilesLocal: number | undefined = coverageMaxFilesLocalInit;\n let coverageMaxHotspotsLocal: number | undefined = coverageMaxHotspotsLocalInit;\n let coveragePageFit = Boolean(process.stdout.isTTY);\n\n const uiEnv = (process.env.COVERAGE_UI ?? '').toLowerCase();\n if (uiEnv === 'both' || uiEnv === 'jest') {\n coverageUi = uiEnv as ParsedArgs['coverageUi'];\n }\n\n const contrib = parseActionsFromTokens(argv).map(toContrib).reduce(combineContrib, emptyContrib);\n vitestArgs.push(...contrib.vitest);\n jestArgs.push(...contrib.jest);\n collectCoverage ||= contrib.coverage;\n coverageUi = contrib.coverageUi ?? coverageUi;\n coverageAbortOnFailure = contrib.coverageAbortOnFailure ?? coverageAbortOnFailure;\n coverageShowCode = contrib.coverageShowCode ?? coverageShowCode;\n const coverageDetailComputed: ParsedArgs['coverageDetail'] | undefined =\n contrib.coverageDetail ?? (contrib.selection ? 'auto' : undefined);\n coverageMode = contrib.coverageMode ?? (contrib.selection ? 'compact' : 'auto');\n coverageMaxFilesLocal = contrib.coverageMaxFiles ?? coverageMaxFilesLocal;\n coverageMaxHotspotsLocal = contrib.coverageMaxHotspots ?? coverageMaxHotspotsLocal;\n coveragePageFit = contrib.coveragePageFit ?? coveragePageFit;\n\n if (collectCoverage) {\n jestArgs.push(\n '--coverage',\n '--coverageProvider=babel',\n '--coverageReporters=lcov',\n '--coverageReporters=json',\n '--coverageReporters=text-summary',\n '--coverageDirectory=coverage/jest',\n );\n }\n\n const selectionLooksLikeTestPath = (contrib.selectionPaths ?? []).some(\n (selectionPath) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(selectionPath) || /(^|\\/)tests?\\//i.test(selectionPath),\n );\n const inferredFromSelection = (contrib.selectionPaths ?? [])\n .map((pathToken) => {\n const normalized = path.normalize(pathToken).replace(/\\\\/g, '/');\n const isDir = !/\\.(m?[tj]sx?)$/i.test(normalized);\n const base = isDir\n ? normalized.replace(/\\/+$/, '')\n : path.dirname(normalized).replace(/\\\\/g, '/');\n return base.length ? `${base}/**/*` : '**/*';\n })\n .filter((glob, index, arr) => arr.indexOf(glob) === index);\n\n const includeGlobs = (contrib.include ?? []).length\n ? (contrib.include as string[])\n : selectionLooksLikeTestPath\n ? [...DEFAULT_INCLUDE]\n : inferredFromSelection.length\n ? inferredFromSelection\n : [...DEFAULT_INCLUDE];\n const excludeGlobs = (contrib.exclude ?? []).length\n ? (contrib.exclude as string[])\n : [...DEFAULT_EXCLUDE];\n\n const out: ParsedArgs = {\n vitestArgs,\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified: Boolean(contrib.selection),\n selectionPaths: [...(contrib.selectionPaths ?? [])],\n includeGlobs,\n excludeGlobs,\n coverageShowCode,\n ...(coverageDetailComputed !== undefined ? { coverageDetail: coverageDetailComputed } : {}),\n coverageMode,\n ...(coverageMaxFilesLocal !== undefined ? { coverageMaxFiles: coverageMaxFilesLocal } : {}),\n ...(coverageMaxHotspotsLocal !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsLocal }\n : {}),\n coveragePageFit,\n ...(contrib.editorCmd !== undefined ? { editorCmd: contrib.editorCmd } : {}),\n ...(contrib.workspaceRoot !== undefined ? { workspaceRoot: contrib.workspaceRoot } : {}),\n };\n return out;\n};\n", "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", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\n\nconst TailSegmentCount = 2 as const;\nconst EmptyCount = 0 as const;\nconst JsonIndentSpaces = 2 as const;\n\nexport const DEFAULT_TEST_GLOBS = [\n \"**/*.{test,spec}.{ts,tsx,js,jsx}\",\n \"tests/**/*.{ts,tsx,js,jsx}\",\n] as const;\n\nexport type FindRelatedOpts = {\n readonly repoRoot: string;\n readonly productionPaths: readonly string[];\n readonly testGlobs?: readonly string[];\n readonly excludeGlobs?: readonly string[];\n readonly timeoutMs?: number;\n};\n\nexport const findRelatedTestsFast = async (\n opts: FindRelatedOpts\n): Promise<readonly string[]> => {\n const repoRoot = path.resolve(opts.repoRoot);\n const testGlobs = opts.testGlobs ?? DEFAULT_TEST_GLOBS;\n const excludeGlobs = opts.excludeGlobs ?? [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/.next/**\",\n ];\n\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRoot, abs).replace(/\\\\/g, \"/\");\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, \"\");\n const base = path.basename(withoutExt);\n const segs = withoutExt.split(\"/\");\n const tail2 = segs.slice(-TailSegmentCount).join(\"/\");\n const uniq = Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));\n return uniq;\n };\n\n const seeds = Array.from(\n new Set(\n opts.productionPaths\n .map((productionPath) => path.resolve(productionPath))\n .flatMap(toSeeds)\n )\n );\n if (seeds.length === EmptyCount) {\n return [] as string[];\n }\n\n try {\n const rgVersion = await runText(\"rg\", [\"--version\"], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n });\n if (!rgVersion) {\n return [] as string[];\n }\n } catch {\n return [] as string[];\n }\n\n const args: string[] = [\"-n\", \"-l\", \"-S\", \"-F\"];\n testGlobs.forEach((globPattern) => args.push(\"-g\", globPattern));\n excludeGlobs.forEach((excludeGlobPattern) =>\n args.push(\"-g\", `!${excludeGlobPattern}`)\n );\n seeds.forEach((seedToken) => args.push(\"-e\", seedToken));\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", [...args, repoRoot], {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n });\n } catch {\n raw = \"\";\n }\n\n const lines = raw\n .split(/\\r?\\n/)\n .map((lineText) => lineText.trim())\n .filter(Boolean);\n\n const looksLikeTest = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n\n const absolute = lines\n .map((relativePath) =>\n path.resolve(repoRoot, relativePath).replace(/\\\\/g, \"/\")\n )\n .filter(looksLikeTest);\n\n const uniq = Array.from(new Set(absolute));\n const results: string[] = [];\n await Promise.all(\n uniq.map(async (absolutePath) => {\n try {\n await fs.access(absolutePath);\n results.push(absolutePath);\n } catch {\n /* ignore */\n }\n })\n );\n return results;\n};\n\nexport const cachedRelated = async (opts: {\n readonly repoRoot: string;\n readonly selectionKey: string;\n readonly compute: () => Promise<readonly string[]>;\n}): Promise<readonly string[]> => {\n const cacheDir = path.join(opts.repoRoot, \".cache\");\n const cacheFile = path.join(cacheDir, \"relevant-tests.json\");\n\n let head = \"nogit\";\n try {\n const raw = await runText(\n \"git\",\n [\"-C\", opts.repoRoot, \"rev-parse\", \"--short\", \"HEAD\"],\n {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n }\n );\n head = raw.trim() || \"nogit\";\n } catch {\n head = \"nogit\";\n }\n\n const key = `${head}::${opts.selectionKey}`;\n\n let bag: Record<string, string[]> = {};\n try {\n const read = await fs.readFile(cacheFile, \"utf8\");\n bag = JSON.parse(read) as Record<string, string[]>;\n } catch {\n bag = {};\n }\n\n const hit = bag[key];\n if (hit?.length) {\n // Validate cached paths still exist on disk; if any are missing, recompute\n const existing: string[] = [];\n await Promise.all(\n hit.map(async (candidatePath) => {\n try {\n await fs.access(candidatePath);\n existing.push(candidatePath);\n } catch {\n // missing \u2192 ignore; will trigger recompute below\n }\n })\n );\n if (existing.length === hit.length) {\n return existing as readonly string[];\n }\n // One or more cached entries are stale; recompute and refresh cache\n const recomputed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(recomputed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(\n cacheFile,\n JSON.stringify(next, null, JsonIndentSpaces)\n );\n } catch {\n /* ignore cache write errors */\n }\n return recomputed as readonly string[];\n }\n\n const computed = await opts.compute();\n try {\n const next = { ...bag, [key]: Array.from(new Set(computed)) } as Record<\n string,\n string[]\n >;\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(cacheFile, JSON.stringify(next, null, JsonIndentSpaces));\n } catch {\n /* ignore cache write errors */\n }\n return computed;\n};\n", "'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n", "'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n", "'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n", "'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n", "'use strict';\n\nmodule.exports = require('./lib/picomatch');\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.exports.ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n isSpaceSeparator (c) {\n return typeof c === 'string' && unicode.Space_Separator.test(c)\n },\n\n isIdStartChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c === '$') || (c === '_') ||\n unicode.ID_Start.test(c)\n )\n },\n\n isIdContinueChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c >= '0' && c <= '9') ||\n (c === '$') || (c === '_') ||\n (c === '\\u200C') || (c === '\\u200D') ||\n unicode.ID_Continue.test(c)\n )\n },\n\n isDigit (c) {\n return typeof c === 'string' && /[0-9]/.test(c)\n },\n\n isHexDigit (c) {\n return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n source = String(text)\n parseState = 'start'\n stack = []\n pos = 0\n line = 1\n column = 0\n token = undefined\n key = undefined\n root = undefined\n\n do {\n token = lex()\n\n // This code is unreachable.\n // if (!parseStates[parseState]) {\n // throw invalidParseState()\n // }\n\n parseStates[parseState]()\n } while (token.type !== 'eof')\n\n if (typeof reviver === 'function') {\n return internalize({'': root}, '', reviver)\n }\n\n return root\n}\n\nfunction internalize (holder, name, reviver) {\n const value = holder[name]\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const key = String(i)\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n } else {\n for (const key in value) {\n const replacement = internalize(value, key, reviver)\n if (replacement === undefined) {\n delete value[key]\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n }\n\n return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n lexState = 'default'\n buffer = ''\n doubleQuote = false\n sign = 1\n\n for (;;) {\n c = peek()\n\n // This code is unreachable.\n // if (!lexStates[lexState]) {\n // throw invalidLexState(lexState)\n // }\n\n const token = lexStates[lexState]()\n if (token) {\n return token\n }\n }\n}\n\nfunction peek () {\n if (source[pos]) {\n return String.fromCodePoint(source.codePointAt(pos))\n }\n}\n\nfunction read () {\n const c = peek()\n\n if (c === '\\n') {\n line++\n column = 0\n } else if (c) {\n column += c.length\n } else {\n column++\n }\n\n if (c) {\n pos += c.length\n }\n\n return c\n}\n\nconst lexStates = {\n default () {\n switch (c) {\n case '\\t':\n case '\\v':\n case '\\f':\n case ' ':\n case '\\u00A0':\n case '\\uFEFF':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n return\n\n case '/':\n read()\n lexState = 'comment'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n if (util.isSpaceSeparator(c)) {\n read()\n return\n }\n\n // This code is unreachable.\n // if (!lexStates[parseState]) {\n // throw invalidLexState(parseState)\n // }\n\n return lexStates[parseState]()\n },\n\n comment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineComment'\n return\n\n case '/':\n read()\n lexState = 'singleLineComment'\n return\n }\n\n throw invalidChar(read())\n },\n\n multiLineComment () {\n switch (c) {\n case '*':\n read()\n lexState = 'multiLineCommentAsterisk'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n },\n\n multiLineCommentAsterisk () {\n switch (c) {\n case '*':\n read()\n return\n\n case '/':\n read()\n lexState = 'default'\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read()\n lexState = 'multiLineComment'\n },\n\n singleLineComment () {\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read()\n lexState = 'default'\n return\n\n case undefined:\n read()\n return newToken('eof')\n }\n\n read()\n },\n\n value () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n case 'n':\n read()\n literal('ull')\n return newToken('null', null)\n\n case 't':\n read()\n literal('rue')\n return newToken('boolean', true)\n\n case 'f':\n read()\n literal('alse')\n return newToken('boolean', false)\n\n case '-':\n case '+':\n if (read() === '-') {\n sign = -1\n }\n\n lexState = 'sign'\n return\n\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n buffer = ''\n lexState = 'string'\n return\n }\n\n throw invalidChar(read())\n },\n\n identifierNameStartEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n break\n\n default:\n if (!util.isIdStartChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n identifierName () {\n switch (c) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n buffer += read()\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameEscape'\n return\n }\n\n if (util.isIdContinueChar(c)) {\n buffer += read()\n return\n }\n\n return newToken('identifier', buffer)\n },\n\n identifierNameEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read()\n const u = unicodeEscape()\n switch (u) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n break\n\n default:\n if (!util.isIdContinueChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u\n lexState = 'identifierName'\n },\n\n sign () {\n switch (c) {\n case '.':\n buffer = read()\n lexState = 'decimalPointLeading'\n return\n\n case '0':\n buffer = read()\n lexState = 'zero'\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read()\n lexState = 'decimalInteger'\n return\n\n case 'I':\n read()\n literal('nfinity')\n return newToken('numeric', sign * Infinity)\n\n case 'N':\n read()\n literal('aN')\n return newToken('numeric', NaN)\n }\n\n throw invalidChar(read())\n },\n\n zero () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n\n case 'x':\n case 'X':\n buffer += read()\n lexState = 'hexadecimal'\n return\n }\n\n return newToken('numeric', sign * 0)\n },\n\n decimalInteger () {\n switch (c) {\n case '.':\n buffer += read()\n lexState = 'decimalPoint'\n return\n\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalPointLeading () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalPoint () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalFraction'\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalFraction () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read()\n lexState = 'decimalExponent'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalExponent () {\n switch (c) {\n case '+':\n case '-':\n buffer += read()\n lexState = 'decimalExponentSign'\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentSign () {\n if (util.isDigit(c)) {\n buffer += read()\n lexState = 'decimalExponentInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentInteger () {\n if (util.isDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n hexadecimal () {\n if (util.isHexDigit(c)) {\n buffer += read()\n lexState = 'hexadecimalInteger'\n return\n }\n\n throw invalidChar(read())\n },\n\n hexadecimalInteger () {\n if (util.isHexDigit(c)) {\n buffer += read()\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n string () {\n switch (c) {\n case '\\\\':\n read()\n buffer += escape()\n return\n\n case '\"':\n if (doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case \"'\":\n if (!doubleQuote) {\n read()\n return newToken('string', buffer)\n }\n\n buffer += read()\n return\n\n case '\\n':\n case '\\r':\n throw invalidChar(read())\n\n case '\\u2028':\n case '\\u2029':\n separatorChar(c)\n break\n\n case undefined:\n throw invalidChar(read())\n }\n\n buffer += read()\n },\n\n start () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n // This code is unreachable since the default lexState handles eof.\n // case undefined:\n // return newToken('eof')\n }\n\n lexState = 'value'\n },\n\n beforePropertyName () {\n switch (c) {\n case '$':\n case '_':\n buffer = read()\n lexState = 'identifierName'\n return\n\n case '\\\\':\n read()\n lexState = 'identifierNameStartEscape'\n return\n\n case '}':\n return newToken('punctuator', read())\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"')\n lexState = 'string'\n return\n }\n\n if (util.isIdStartChar(c)) {\n buffer += read()\n lexState = 'identifierName'\n return\n }\n\n throw invalidChar(read())\n },\n\n afterPropertyName () {\n if (c === ':') {\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforePropertyValue () {\n lexState = 'value'\n },\n\n afterPropertyValue () {\n switch (c) {\n case ',':\n case '}':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforeArrayValue () {\n if (c === ']') {\n return newToken('punctuator', read())\n }\n\n lexState = 'value'\n },\n\n afterArrayValue () {\n switch (c) {\n case ',':\n case ']':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n end () {\n // This code is unreachable since it's handled by the default lexState.\n // if (c === undefined) {\n // read()\n // return newToken('eof')\n // }\n\n throw invalidChar(read())\n },\n}\n\nfunction newToken (type, value) {\n return {\n type,\n value,\n line,\n column,\n }\n}\n\nfunction literal (s) {\n for (const c of s) {\n const p = peek()\n\n if (p !== c) {\n throw invalidChar(read())\n }\n\n read()\n }\n}\n\nfunction escape () {\n const c = peek()\n switch (c) {\n case 'b':\n read()\n return '\\b'\n\n case 'f':\n read()\n return '\\f'\n\n case 'n':\n read()\n return '\\n'\n\n case 'r':\n read()\n return '\\r'\n\n case 't':\n read()\n return '\\t'\n\n case 'v':\n read()\n return '\\v'\n\n case '0':\n read()\n if (util.isDigit(peek())) {\n throw invalidChar(read())\n }\n\n return '\\0'\n\n case 'x':\n read()\n return hexEscape()\n\n case 'u':\n read()\n return unicodeEscape()\n\n case '\\n':\n case '\\u2028':\n case '\\u2029':\n read()\n return ''\n\n case '\\r':\n read()\n if (peek() === '\\n') {\n read()\n }\n\n return ''\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n throw invalidChar(read())\n\n case undefined:\n throw invalidChar(read())\n }\n\n return read()\n}\n\nfunction hexEscape () {\n let buffer = ''\n let c = peek()\n\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n let buffer = ''\n let count = 4\n\n while (count-- > 0) {\n const c = peek()\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read()\n }\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n start () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforePropertyName () {\n switch (token.type) {\n case 'identifier':\n case 'string':\n key = token.value\n parseState = 'afterPropertyName'\n return\n\n case 'punctuator':\n // This code is unreachable since it's handled by the lexState.\n // if (token.value !== '}') {\n // throw invalidToken()\n // }\n\n pop()\n return\n\n case 'eof':\n throw invalidEOF()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterPropertyName () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator' || token.value !== ':') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n parseState = 'beforePropertyValue'\n },\n\n beforePropertyValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push()\n },\n\n beforeArrayValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n if (token.type === 'punctuator' && token.value === ']') {\n pop()\n return\n }\n\n push()\n },\n\n afterPropertyValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforePropertyName'\n return\n\n case '}':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterArrayValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforeArrayValue'\n return\n\n case ']':\n pop()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n end () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'eof') {\n // throw invalidToken()\n // }\n },\n}\n\nfunction push () {\n let value\n\n switch (token.type) {\n case 'punctuator':\n switch (token.value) {\n case '{':\n value = {}\n break\n\n case '[':\n value = []\n break\n }\n\n break\n\n case 'null':\n case 'boolean':\n case 'numeric':\n case 'string':\n value = token.value\n break\n\n // This code is unreachable.\n // default:\n // throw invalidToken()\n }\n\n if (root === undefined) {\n root = value\n } else {\n const parent = stack[stack.length - 1]\n if (Array.isArray(parent)) {\n parent.push(value)\n } else {\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n\n if (value !== null && typeof value === 'object') {\n stack.push(value)\n\n if (Array.isArray(value)) {\n parseState = 'beforeArrayValue'\n } else {\n parseState = 'beforePropertyName'\n }\n } else {\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n }\n}\n\nfunction pop () {\n stack.pop()\n\n const current = stack[stack.length - 1]\n if (current == null) {\n parseState = 'end'\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue'\n } else {\n parseState = 'afterPropertyValue'\n }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n// return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n// return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n if (c === undefined) {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n }\n\n return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n// if (token.type === 'eof') {\n// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n// }\n\n// const c = String.fromCodePoint(token.value.codePointAt(0))\n// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n column -= 5\n return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n if (replacements[c]) {\n return replacements[c]\n }\n\n if (c < ' ') {\n const hexString = c.charCodeAt(0).toString(16)\n return '\\\\x' + ('00' + hexString).substring(hexString.length)\n }\n\n return c\n}\n\nfunction syntaxError (message) {\n const err = new SyntaxError(message)\n err.lineNumber = line\n err.columnNumber = column\n return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n const stack = []\n let indent = ''\n let propertyList\n let replacerFunc\n let gap = ''\n let quote\n\n if (\n replacer != null &&\n typeof replacer === 'object' &&\n !Array.isArray(replacer)\n ) {\n space = replacer.space\n quote = replacer.quote\n replacer = replacer.replacer\n }\n\n if (typeof replacer === 'function') {\n replacerFunc = replacer\n } else if (Array.isArray(replacer)) {\n propertyList = []\n for (const v of replacer) {\n let item\n\n if (typeof v === 'string') {\n item = v\n } else if (\n typeof v === 'number' ||\n v instanceof String ||\n v instanceof Number\n ) {\n item = String(v)\n }\n\n if (item !== undefined && propertyList.indexOf(item) < 0) {\n propertyList.push(item)\n }\n }\n }\n\n if (space instanceof Number) {\n space = Number(space)\n } else if (space instanceof String) {\n space = String(space)\n }\n\n if (typeof space === 'number') {\n if (space > 0) {\n space = Math.min(10, Math.floor(space))\n gap = ' '.substr(0, space)\n }\n } else if (typeof space === 'string') {\n gap = space.substr(0, 10)\n }\n\n return serializeProperty('', {'': value})\n\n function serializeProperty (key, holder) {\n let value = holder[key]\n if (value != null) {\n if (typeof value.toJSON5 === 'function') {\n value = value.toJSON5(key)\n } else if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n }\n\n if (replacerFunc) {\n value = replacerFunc.call(holder, key, value)\n }\n\n if (value instanceof Number) {\n value = Number(value)\n } else if (value instanceof String) {\n value = String(value)\n } else if (value instanceof Boolean) {\n value = value.valueOf()\n }\n\n switch (value) {\n case null: return 'null'\n case true: return 'true'\n case false: return 'false'\n }\n\n if (typeof value === 'string') {\n return quoteString(value, false)\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'object') {\n return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n }\n\n return undefined\n }\n\n function quoteString (value) {\n const quotes = {\n \"'\": 0.1,\n '\"': 0.2,\n }\n\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n }\n\n let product = ''\n\n for (let i = 0; i < value.length; i++) {\n const c = value[i]\n switch (c) {\n case \"'\":\n case '\"':\n quotes[c]++\n product += c\n continue\n\n case '\\0':\n if (util.isDigit(value[i + 1])) {\n product += '\\\\x00'\n continue\n }\n }\n\n if (replacements[c]) {\n product += replacements[c]\n continue\n }\n\n if (c < ' ') {\n let hexString = c.charCodeAt(0).toString(16)\n product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n continue\n }\n\n product += c\n }\n\n const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n return quoteChar + product + quoteChar\n }\n\n function serializeObject (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let keys = propertyList || Object.keys(value)\n let partial = []\n for (const key of keys) {\n const propertyString = serializeProperty(key, value)\n if (propertyString !== undefined) {\n let member = serializeKey(key) + ':'\n if (gap !== '') {\n member += ' '\n }\n member += propertyString\n partial.push(member)\n }\n }\n\n let final\n if (partial.length === 0) {\n final = '{}'\n } else {\n let properties\n if (gap === '') {\n properties = partial.join(',')\n final = '{' + properties + '}'\n } else {\n let separator = ',\\n' + indent\n properties = partial.join(separator)\n final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n\n function serializeKey (key) {\n if (key.length === 0) {\n return quoteString(key, true)\n }\n\n const firstChar = String.fromCodePoint(key.codePointAt(0))\n if (!util.isIdStartChar(firstChar)) {\n return quoteString(key, true)\n }\n\n for (let i = firstChar.length; i < key.length; i++) {\n if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n return quoteString(key, true)\n }\n }\n\n return key\n }\n\n function serializeArray (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value)\n\n let stepback = indent\n indent = indent + gap\n\n let partial = []\n for (let i = 0; i < value.length; i++) {\n const propertyString = serializeProperty(String(i), value)\n partial.push((propertyString !== undefined) ? propertyString : 'null')\n }\n\n let final\n if (partial.length === 0) {\n final = '[]'\n } else {\n if (gap === '') {\n let properties = partial.join(',')\n final = '[' + properties + ']'\n } else {\n let separator = ',\\n' + indent\n let properties = partial.join(separator)\n final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n }\n }\n\n stack.pop()\n indent = stepback\n return final\n }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n parse,\n stringify,\n}\n\nmodule.exports = JSON5\n", "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", "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 { 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", "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", "export * from \"./lib/ansi\";\nexport * from \"./lib/paths\";\nexport * from \"./lib/stacks\";\nexport * from \"./lib/bars\";\nexport * from \"./lib/table\";\nexport * from \"./lib/args\";\nexport * from \"./lib/discovery\";\nexport * from \"./lib/coverage-core\";\nexport * from \"./lib/coverage-print\";\nexport * from \"./lib/jest-bridge\";\nexport * from \"./lib/program\";\nexport * from \"./lib/path-resolver\";\n", "/* eslint-disable no-continue */\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { DEFAULT_EXCLUDE } from \"./args\";\nimport {\n cachedRelated,\n findRelatedTestsFast,\n DEFAULT_TEST_GLOBS,\n} from \"./fast-related\";\nimport { selectDirectTestsForProduction } from \"./graph-distance\";\n\nexport async function findRepoRoot(): Promise<string> {\n let workingDirectory = process.cwd();\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await fs.stat(path.join(workingDirectory, \".git\"));\n return workingDirectory;\n } catch {\n const parentDirectory = path.dirname(workingDirectory);\n if (parentDirectory === workingDirectory) {\n return process.cwd();\n }\n workingDirectory = parentDirectory;\n }\n }\n}\n\nexport const WATCH_FLAGS = new Set([\"--watch\", \"-w\", \"--watchAll\"]);\n\nexport const argsForDiscovery = (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[]\n) => {\n const COVERAGE_PREFIXES = [\n \"--coverage\",\n \"--coverageReporters\",\n \"--coverageDirectory\",\n \"--coverage.reporter\",\n \"--coverage.reportsDirectory\",\n ] as const;\n const strip = (args: readonly string[]) => {\n const out: string[] = [];\n for (let i = 0; i < args.length; i += 1) {\n const token = args[i]!;\n if (token === \"run\") {\n continue;\n }\n if (WATCH_FLAGS.has(token)) {\n continue;\n }\n const isCoverage =\n COVERAGE_PREFIXES.some(\n (prefix) => token === prefix || token.startsWith(`${prefix}=`)\n ) ||\n (COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length &&\n !String(args[i + 1]).startsWith(\"-\"));\n if (isCoverage) {\n if (\n COVERAGE_PREFIXES.some((prefix) => token === prefix) &&\n i + 1 < args.length\n ) {\n i += 1;\n }\n continue;\n }\n out.push(token);\n }\n return out;\n };\n const base = strip(jestArgs);\n const withNoWatchman = base.includes(\"--no-watchman\")\n ? base\n : [...base, \"--no-watchman\"];\n return { vitest: [], jest: withNoWatchman };\n};\n\nexport type FilesObject = { readonly files: readonly string[] };\nexport const isFilesObject = (candidate: unknown): candidate is FilesObject =>\n typeof candidate === \"object\" && candidate !== null && \"files\" in candidate;\n\nexport async function discoverJest(\n jestArgs: readonly string[],\n opts?: {\n readonly relatedPaths?: readonly string[];\n readonly patterns?: readonly string[];\n readonly cwd?: string;\n }\n): Promise<string[]> {\n const hasRelated = Boolean(\n opts?.relatedPaths && opts.relatedPaths.length > 0\n );\n const hasPatterns = Boolean(opts?.patterns && opts.patterns.length > 0);\n // Always include --listTests so stdout is a file list, even when using --findRelatedTests\n const listArgs = [\n ...jestArgs,\n \"--listTests\",\n ...(hasRelated ? ([\"--findRelatedTests\"] as const) : ([] as const)),\n ...(hasRelated\n ? (opts!.relatedPaths as readonly string[]) ?? []\n : ([] as const)),\n ...(hasPatterns\n ? (opts!.patterns as readonly string[]) ?? []\n : ([] as const)),\n ];\n const babelNodeBin = \"./node_modules/.bin/babel-node\";\n const jestBin = \"./node_modules/.bin/jest\";\n const raw = await runText(\n babelNodeBin,\n [\"--extensions\", \".js,.ts\", jestBin, ...listArgs],\n {\n cwd: opts?.cwd ?? process.cwd(),\n env: safeEnv(process.env, {\n CI: \"1\",\n NODE_ENV: \"test\",\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 20000,\n }\n );\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nexport const discoverJestResilient = async (\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<readonly string[]> => {\n try {\n return await discoverJest(jestArgs, opts);\n } catch (err) {\n const msg = String((err as Error)?.message ?? err);\n if (!msg.includes(\"timed out\")) {\n throw err;\n }\n const repoRoot = opts?.cwd ?? (await findRepoRoot());\n const related = opts?.relatedPaths ?? [];\n if (related.length === 0) {\n console.warn(\n \"Jest list timed out and no related production paths were provided; falling back to empty Jest set.\"\n );\n return [] as string[];\n }\n console.warn(\n `Jest list timed out; falling back to ripgrep-based related test discovery for ${related.length} prod path(s).`\n );\n const selectionKey = related\n .map((abs) => path.relative(repoRoot, abs).replace(/\\\\/g, \"/\"))\n .sort()\n .join(\"|\");\n const rgMatches = await cachedRelated({\n repoRoot,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot,\n productionPaths: related,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n const toAbsolutePosix = (candidatePath: string) => {\n const isAbs = path.isAbsolute(candidatePath);\n const absJoined = isAbs\n ? candidatePath\n : path.join(repoRoot, candidatePath);\n return absJoined.replace(/\\\\/g, \"/\");\n };\n const jestCandidates = rgMatches\n .filter((candidatePath) => !/\\.d\\.ts$/.test(candidatePath))\n .map(toAbsolutePosix);\n if (jestCandidates.length === 0) {\n console.info(\"Fallback produced 0 Jest candidates.\");\n } else {\n console.info(\n `Fallback produced ${jestCandidates.length} Jest candidate(s).`\n );\n }\n return jestCandidates as readonly string[];\n }\n};\n\nexport const discoverTargets = async (\n _vitestArgs: readonly string[],\n jestArgs: readonly string[],\n opts?: { readonly relatedPaths?: readonly string[]; readonly cwd?: string }\n): Promise<{\n readonly vitestFiles: readonly string[];\n readonly jestFiles: readonly string[];\n}> => {\n const related = opts?.relatedPaths ?? [];\n const cwd = opts?.cwd;\n // If production paths were provided, select tests that directly import them (Group 1)\n if (related.length > 0) {\n const repoRoot = cwd ?? (await findRepoRoot());\n // List all jest tests under config\n let allTests: readonly string[] = [];\n try {\n allTests = await discoverJest(jestArgs, { cwd: repoRoot });\n } catch {\n allTests = [];\n }\n if (allTests.length > 0) {\n const direct = await selectDirectTestsForProduction({\n rootDir: repoRoot,\n testFiles: allTests,\n productionFiles: related,\n });\n console.debug(\n `Direct-related jest tests: ${direct.length} (from ${allTests.length} total)`\n );\n return { vitestFiles: [] as string[], jestFiles: direct };\n }\n }\n const jestOpts = {\n relatedPaths: related,\n ...(cwd !== undefined ? { cwd } : {}),\n } as const;\n const [jestFiles] = await Promise.all([\n discoverJestResilient(jestArgs, jestOpts),\n ]);\n console.debug(`Discovery \u2192 jest: ${jestFiles.length}`);\n return { vitestFiles: [] as string[], jestFiles };\n};\n\nexport const filterCandidatesForProject = async (\n cfgPath: string,\n jestArgs: readonly string[],\n candidates: readonly string[],\n cwd: string\n): Promise<readonly string[]> => {\n if (candidates.length === 0) {\n return [] as const;\n }\n // Use --listTests with relative file patterns only; avoid --findRelatedTests here\n const toPosixNormalized = (inputPath: string) =>\n inputPath.replace(/\\\\/g, \"/\");\n const relativePatterns = candidates\n .map((absOrRel) =>\n path.isAbsolute(absOrRel) ? path.relative(cwd, absOrRel) : absOrRel\n )\n .map(toPosixNormalized);\n\n console.log(\"relativePatterns:\", relativePatterns);\n let attemptPatterns: string[] = [];\n try {\n attemptPatterns = await discoverJest([...jestArgs, \"--config\", cfgPath], {\n patterns: relativePatterns,\n cwd,\n });\n } catch {\n attemptPatterns = [];\n }\n const normalizedAttemptPatterns = attemptPatterns.map((candidatePath) =>\n toPosixNormalized(candidatePath)\n );\n if (normalizedAttemptPatterns.length > 0) {\n return normalizedAttemptPatterns as readonly string[];\n }\n // Fallback: if Jest couldn't list,\n // pass the relative patterns as absolute paths for '--runTestsByPath'\n const absoluteFromRelative = relativePatterns.map((rel) =>\n toPosixNormalized(path.join(cwd, rel))\n );\n return absoluteFromRelative as readonly string[];\n};\n\nexport const decideShouldRunJest = (\n vitestFiles: readonly string[],\n jestFiles: readonly string[],\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n }\n) => {\n const MAX_JEST_FILES = 200;\n const total = vitestFiles.length + jestFiles.length;\n const share = total > 0 ? jestFiles.length / total : 0;\n const looksLikeTestPath = (pathText: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) ||\n /(^|\\/)tests?\\//i.test(pathText);\n const looksLikePath = (pathText: string) =>\n /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText);\n const anyTestSelected = (opts.selectionPaths ?? []).some(looksLikeTestPath);\n const anyPathSelected = (opts.selectionPaths ?? []).some(looksLikePath);\n if (!opts.selectionSpecified) {\n return { shouldRunJest: false, share, reason: \"broad_run_guard\" } as const;\n }\n if (jestFiles.length === 0) {\n return { shouldRunJest: false, share, reason: \"no_jest_tests\" } as const;\n }\n if (vitestFiles.length === 0) {\n return jestFiles.length > MAX_JEST_FILES\n ? ({\n shouldRunJest: false,\n share: 1,\n reason: \"full_suite_guard\",\n } as const)\n : ({ shouldRunJest: true, share: 1, reason: \"only_jest\" } as const);\n }\n const threshold = anyTestSelected ? 0.7 : 0.8;\n if (jestFiles.length > MAX_JEST_FILES) {\n return { shouldRunJest: false, share, reason: \"full_suite_guard\" } as const;\n }\n if (!anyPathSelected) {\n return share >= 0.85\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n }\n return share >= threshold\n ? ({ shouldRunJest: true, share, reason: \"meets_threshold\" } as const)\n : ({ shouldRunJest: false, share, reason: \"below_threshold\" } as const);\n};\n", "import * as path from \"node:path\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\n\nexport type ImportSpecExtractor = (\n absPath: string\n) => Promise<readonly string[]>;\n\n// Regex patterns for ripgrep (kept as raw templates to preserve backslashes)\nconst RG_IMPORT_FROM = String.raw`import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"]`;\nconst RG_REQUIRE = String.raw`require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)`;\nconst RG_EXPORT_FROM = String.raw`export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"]`;\n\nexport const extractImportSpecs: ImportSpecExtractor = async (absPath) => {\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n RG_IMPORT_FROM,\n \"-e\",\n RG_REQUIRE,\n \"-e\",\n RG_EXPORT_FROM,\n absPath,\n ];\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n return raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n};\n\nexport const isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Return tests that directly import any of the production files (distance 1).\nexport const selectDirectTestsForProduction = async (opts: {\n readonly rootDir: string;\n readonly testFiles: readonly string[];\n readonly productionFiles: readonly string[];\n}): Promise<readonly string[]> => {\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const prodSet = new Set(\n opts.productionFiles.map((prodPath) =>\n path.resolve(prodPath).replace(/\\\\/g, \"/\")\n )\n );\n const out: string[] = [];\n for (const testAbsRaw of opts.testFiles) {\n const testAbs = path.resolve(testAbsRaw).replace(/\\\\/g, \"/\");\n let specs: readonly string[] = [];\n const cached = specsCache.get(testAbs);\n if (cached !== undefined) {\n specs = cached;\n } else {\n // eslint-disable-next-line no-await-in-loop\n specs = await extractImportSpecs(testAbs);\n specsCache.set(testAbs, specs);\n }\n let direct = false;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n testAbs,\n spec,\n opts.rootDir,\n resolutionCache\n );\n if (resolved && prodSet.has(resolved)) {\n direct = true;\n break;\n }\n }\n if (direct) {\n out.push(testAbs);\n }\n }\n return out;\n};\n", "import * as path from 'node:path';\nimport * as fsSync from 'node:fs';\n\nconst INDEX_NOT_FOUND = -1;\nconst ZERO = 0;\nconst ONE = 1;\n\ntype TsLikePathsConfig = {\n readonly configDir: string;\n readonly baseUrl?: string;\n readonly paths?: Record<string, readonly string[]>;\n};\n\ntype JestAliasConfig = {\n readonly configDir: string;\n readonly mappers: ReadonlyArray<{ pattern: RegExp; target: string }>;\n readonly moduleDirs: ReadonlyArray<string>;\n};\n\ntype BabelAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n readonly roots: ReadonlyArray<string>;\n readonly extensions: ReadonlyArray<string>;\n};\n\ntype ModuleResolverOptions = {\n alias?: Record<string, string>;\n root?: readonly string[];\n extensions?: readonly string[];\n};\n\ntype MetroAliasConfig = {\n readonly configDir: string;\n readonly aliases: Record<string, string>;\n};\n\nconst tsConfigLookupCache = new Map<string, TsLikePathsConfig | null>();\nconst jestConfigLookupCache = new Map<string, JestAliasConfig | null>();\nconst babelConfigLookupCache = new Map<string, BabelAliasConfig | null>();\nconst metroConfigLookupCache = new Map<string, MetroAliasConfig | null>();\n\nconst FILE_EXTS = [\n '',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.mts',\n '.cts',\n '.json',\n] as const;\n\nexport const tryResolveFile = (candidateBase: string): string | undefined => {\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n try {\n const stat = fsSync.statSync(full);\n if (stat.isFile()) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n } catch {\n // ignore\n }\n }\n }\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return path.resolve(full).replace(/\\\\/g, '/');\n }\n }\n return undefined;\n};\n\nconst JEST_CONFIG_FILENAMES = [\n 'jest.config.js',\n 'jest.config.cjs',\n 'jest.config.mjs',\n 'jest.config.ts',\n 'jest.config.cts',\n];\n\nconst loadNearestJestConfig = (startDir: string, rootDir: string): JestAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = jestConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of JEST_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const mappers: Array<{ pattern: RegExp; target: string }> = [];\n const moduleDirs: string[] = [];\n const mapperBlockMatch = raw.match(/moduleNameMapper\\s*:\\s*\\{([\\s\\S]*?)\\}/m);\n if (mapperBlockMatch) {\n const [, body = ''] = mapperBlockMatch;\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*[\"']([^\"']+)[\"']/g;\n let matchResult: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((matchResult = pairRe.exec(body))) {\n const [, patternSrcRaw, targetRaw] = matchResult as unknown as [string, string, string];\n if (patternSrcRaw && targetRaw) {\n try {\n const pattern = new RegExp(patternSrcRaw);\n mappers.push({ pattern, target: targetRaw });\n } catch {\n // ignore invalid regex entries\n }\n }\n }\n }\n const dirsMatch = raw.match(/moduleDirectories\\s*:\\s*\\[([^\\]]*?)\\]/m);\n if (dirsMatch) {\n const [, arr = ''] = dirsMatch;\n const strRe = /[\"']([^\"']+)[\"']/g;\n let dirMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((dirMatch = strRe.exec(arr))) {\n const [, capturedDirRaw] = dirMatch as unknown as [string, string];\n if (capturedDirRaw && capturedDirRaw.length > ZERO) {\n moduleDirs.push(capturedDirRaw);\n }\n }\n }\n const cfg: JestAliasConfig = {\n configDir: path.dirname(filePath),\n mappers,\n moduleDirs,\n };\n jestConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n jestConfigLookupCache.set(cur, null);\n return null;\n }\n }\n jestConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyJestMappings = (spec: string, cfg: JestAliasConfig): string | undefined => {\n for (const mapping of cfg.mappers) {\n const { pattern, target } = mapping;\n if (pattern.test(spec)) {\n const replacedRoot = target.replace(/<rootDir>/g, cfg.configDir);\n const candidate = spec.replace(pattern, replacedRoot);\n const res = tryResolveFile(candidate);\n if (res) {\n return res;\n }\n }\n }\n for (const dir of cfg.moduleDirs) {\n if (dir !== 'node_modules') {\n const base = path.isAbsolute(dir) ? dir : path.resolve(cfg.configDir, dir);\n const res = tryResolveFile(path.join(base, spec));\n if (res) {\n return res;\n }\n }\n }\n return undefined;\n};\n\nconst BABEL_CONFIG_FILENAMES = [\n '.babelrc',\n '.babelrc.json',\n 'babel.config.js',\n 'babel.config.cjs',\n 'babel.config.mjs',\n 'babel.config.ts',\n 'babel.config.cts',\n];\n\nconst MODULE_RESOLVER_NAMES = new Set([\n 'module-resolver',\n 'babel-plugin-module-resolver',\n '@babel/plugin-module-resolver',\n]);\n\nconst loadNearestBabelConfig = (startDir: string, rootDir: string): BabelAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = babelConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const name of BABEL_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, name);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n let aliases: Record<string, string> = {};\n const roots: string[] = [];\n const extensions: string[] = [];\n if (filePath.endsWith('.json') || path.basename(filePath) === '.babelrc') {\n try {\n const json = JSON.parse(raw) as { plugins?: unknown };\n const plugins = (json.plugins as unknown[]) || [];\n for (const pluginEntry of plugins) {\n if (Array.isArray(pluginEntry)) {\n const [pluginNameRaw, pluginOptionsRaw] = pluginEntry as [unknown, unknown];\n if (typeof pluginNameRaw === 'string' && MODULE_RESOLVER_NAMES.has(pluginNameRaw)) {\n const opts: ModuleResolverOptions =\n (pluginOptionsRaw as ModuleResolverOptions) || {};\n if (opts.alias && typeof opts.alias === 'object') {\n aliases = { ...aliases, ...opts.alias };\n }\n const rootArr = Array.isArray(opts.root) ? opts.root : [];\n for (const rootEntry of rootArr) {\n if (typeof rootEntry === 'string') {\n roots.push(rootEntry);\n }\n }\n const extArr = Array.isArray(opts.extensions) ? opts.extensions : [];\n for (const extEntry of extArr) {\n if (typeof extEntry === 'string') {\n extensions.push(extEntry);\n }\n }\n }\n }\n }\n } catch {\n // ignore JSON parse\n }\n }\n const cfg: BabelAliasConfig = {\n configDir: path.dirname(filePath),\n aliases,\n roots,\n extensions,\n };\n babelConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n babelConfigLookupCache.set(cur, null);\n return null;\n }\n }\n babelConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyBabelMappings = (spec: string, cfg: BabelAliasConfig): string | undefined => {\n const keys = Object.keys(cfg.aliases);\n let best: string | undefined;\n for (const key of keys) {\n if (matchPathKey(spec, key)) {\n if (!best || key.length > best.length) {\n best = key;\n }\n }\n }\n if (!best) {\n return undefined;\n }\n const replaced = replacePathKey(spec, best);\n const targetTmpl = cfg.aliases[best] ?? '';\n const targetPath = targetTmpl.includes('*') ? targetTmpl.replace('*', replaced) : targetTmpl;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n if (!targetTmpl.includes('*') && replaced) {\n const joined = path.join(abs, replaced);\n const r2 = tryResolveFile(joined);\n if (r2) {\n return r2;\n }\n }\n for (const rootBase of cfg.roots) {\n const base = path.isAbsolute(rootBase) ? rootBase : path.resolve(cfg.configDir, rootBase);\n const r3 = tryResolveFile(path.join(base, spec));\n if (r3) {\n return r3;\n }\n }\n return undefined;\n};\n\nconst METRO_CONFIG_FILENAMES = ['metro.config.js', 'metro.config.cjs', 'metro.config.mjs'];\n\nconst loadNearestMetroConfig = (startDir: string, rootDir: string): MetroAliasConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = metroConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n let filePath: string | undefined;\n for (const configFileName of METRO_CONFIG_FILENAMES) {\n const candidatePath = path.join(cur, configFileName);\n if (fsSync.existsSync(candidatePath)) {\n filePath = candidatePath;\n break;\n }\n }\n if (filePath) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const varMap = new Map<string, string>();\n varMap.set('__dirname', path.dirname(filePath));\n const projectRootMatch = raw.match(/const\\s+projectRoot\\s*=\\s*__dirname\\s*;/);\n if (projectRootMatch) {\n varMap.set('projectRoot', path.dirname(filePath));\n }\n const workspaceRootMatch = raw.match(\n /const\\s+workspaceRoot\\s*=\\s*path\\.resolve\\(\\s*projectRoot\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (workspaceRootMatch) {\n const [, rel = ''] = workspaceRootMatch;\n const base = varMap.get('projectRoot') ?? path.dirname(filePath);\n if (rel) {\n varMap.set('workspaceRoot', path.resolve(base, rel));\n }\n }\n const extraMatch = raw.match(/extraNodeModules\\s*=\\s*\\{([\\s\\S]*?)\\}/m);\n const aliases: Record<string, string> = {};\n if (extraMatch) {\n const body = extraMatch[1] ?? '';\n const pairRe = /[\"']([^\"']+)[\"']\\s*:\\s*([^,]+),?/g;\n let pairMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((pairMatch = pairRe.exec(body))) {\n const [, aliasKeyRaw, rhsRaw] = pairMatch as unknown as [string, string, string];\n const aliasKey = aliasKeyRaw ?? '';\n const rhs = (rhsRaw ?? '').trim();\n let resolved: string | undefined;\n const strMatch = rhs.match(/^[\"']([^\"']+)[\"']$/);\n if (strMatch && strMatch[1]) {\n const strVal = strMatch[1] as string;\n resolved = path.isAbsolute(strVal)\n ? strVal\n : path.resolve(path.dirname(filePath), strVal);\n } else {\n const resMatch = rhs.match(\n /path\\.resolve\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*,\\s*['\"]([^'\"]+)['\"]\\s*\\)/,\n );\n if (resMatch && resMatch[1] && resMatch[2]) {\n const varName = resMatch[1] as string;\n const segment = resMatch[2] as string;\n const base = varMap.get(varName) ?? path.dirname(filePath);\n resolved = path.resolve(base, segment);\n }\n }\n if (aliasKey && resolved) {\n aliases[aliasKey] = resolved;\n }\n }\n }\n const cfg: MetroAliasConfig = { configDir: path.dirname(filePath), aliases };\n metroConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n metroConfigLookupCache.set(cur, null);\n return null;\n }\n }\n metroConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyMetroMappings = (spec: string, cfg: MetroAliasConfig): string | undefined => {\n const entries = Object.entries(cfg.aliases);\n let bestKey: string | undefined;\n for (const [alias] of entries) {\n if (spec === alias || spec.startsWith(`${alias}/`)) {\n if (!bestKey || alias.length > bestKey.length) {\n bestKey = alias;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const sureKey = bestKey as string;\n const base = cfg.aliases[sureKey] ?? '';\n if (!base) {\n return undefined;\n }\n const remainder = spec === sureKey ? '' : spec.slice(sureKey.length + 1);\n const candidate = remainder ? path.join(base, remainder) : base;\n const res = tryResolveFile(candidate);\n return res;\n};\n\nconst loadNearestTsOrJsConfig = (startDir: string, rootDir: string): TsLikePathsConfig | null => {\n let cur = startDir;\n while (cur.startsWith(rootDir)) {\n const cached = tsConfigLookupCache.get(cur);\n if (cached !== undefined) {\n return cached;\n }\n const tsPath = path.join(cur, 'tsconfig.json');\n const jsPath = path.join(cur, 'jsconfig.json');\n if (fsSync.existsSync(tsPath) || fsSync.existsSync(jsPath)) {\n const filePath = fsSync.existsSync(tsPath) ? tsPath : jsPath;\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const json = JSON.parse(raw) as unknown;\n const compilerOptionsRaw = (json as { compilerOptions?: unknown }).compilerOptions ?? {};\n const { baseUrl: baseUrlRaw, paths } = compilerOptionsRaw as {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n const baseUrl = baseUrlRaw ? path.resolve(cur, baseUrlRaw) : undefined;\n const cfg: TsLikePathsConfig = {\n configDir: cur,\n ...(baseUrl ? { baseUrl } : {}),\n ...(paths ? { paths } : {}),\n };\n tsConfigLookupCache.set(cur, cfg);\n return cfg;\n } catch {\n tsConfigLookupCache.set(cur, null);\n return null;\n }\n }\n tsConfigLookupCache.set(cur, null);\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return null;\n};\n\nconst applyPathsMapping = (spec: string, cfg: TsLikePathsConfig): string | undefined => {\n const map = cfg.paths;\n if (!map) {\n return undefined;\n }\n let bestKey: string | undefined;\n for (const key of Object.keys(map)) {\n if (matchPathKey(spec, key)) {\n if (!bestKey || key.length > bestKey.length) {\n bestKey = key;\n }\n }\n }\n if (!bestKey) {\n return undefined;\n }\n const targets = map[bestKey] ?? [];\n const replaced = replacePathKey(spec, bestKey);\n for (const target of targets) {\n const targetPath = target.includes('*') ? target.replace('*', replaced) : target;\n const abs = path.isAbsolute(targetPath) ? targetPath : path.resolve(cfg.configDir, targetPath);\n const res = tryResolveFile(abs);\n if (res) {\n return res;\n }\n }\n return undefined;\n};\n\nfunction matchPathKey(spec: string, key: string): boolean {\n if (key === spec) {\n return true;\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return false;\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.startsWith(prefix) && spec.endsWith(suffix);\n}\n\nfunction replacePathKey(spec: string, key: string): string {\n if (key === spec) {\n return '';\n }\n const starIdx = key.indexOf('*');\n if (starIdx === INDEX_NOT_FOUND) {\n return '';\n }\n const prefix = key.slice(ZERO, starIdx);\n const suffix = key.slice(starIdx + ONE);\n return spec.slice(prefix.length, spec.length - suffix.length);\n}\n\nfunction resolveWithAliases(fromFile: string, spec: string, rootDir: string): string | undefined {\n const startDir = path.dirname(fromFile);\n let cur: string | undefined = startDir;\n while (cur && cur.startsWith(rootDir)) {\n const tsCfg = loadNearestTsOrJsConfig(cur, rootDir);\n if (tsCfg) {\n const viaPaths = applyPathsMapping(spec, tsCfg);\n if (viaPaths) {\n return viaPaths;\n }\n if (tsCfg.baseUrl) {\n const viaBase = tryResolveFile(path.join(tsCfg.baseUrl, spec));\n if (viaBase) {\n return viaBase;\n }\n }\n }\n const babelCfg = loadNearestBabelConfig(cur, rootDir);\n if (babelCfg) {\n const viaBabel = applyBabelMappings(spec, babelCfg);\n if (viaBabel) {\n return viaBabel;\n }\n }\n const jestCfg = loadNearestJestConfig(cur, rootDir);\n if (jestCfg) {\n const viaJest = applyJestMappings(spec, jestCfg);\n if (viaJest) {\n return viaJest;\n }\n }\n const metroCfg = loadNearestMetroConfig(cur, rootDir);\n if (metroCfg) {\n const viaMetro = applyMetroMappings(spec, metroCfg);\n if (viaMetro) {\n return viaMetro;\n }\n }\n const parent = path.dirname(cur);\n if (parent === cur) {\n break;\n }\n cur = parent;\n }\n return undefined;\n}\n\nexport const resolveImportWithRoot = (\n fromFile: string,\n spec: string,\n rootDir: string,\n cache: Map<string, string | undefined>,\n): string | undefined => {\n const key = `${fromFile}|${spec}`;\n const cached = cache.get(key);\n if (cached !== undefined) {\n return cached;\n }\n let resolved: string | undefined;\n const baseDir = path.dirname(fromFile);\n const isProjectAbs = spec.startsWith('/');\n const candidateBase = isProjectAbs\n ? path.join(rootDir, spec.slice(ONE))\n : path.resolve(baseDir, spec);\n for (const ext of FILE_EXTS) {\n const full = ext ? `${candidateBase}${ext}` : candidateBase;\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n if (!resolved) {\n for (const ext of FILE_EXTS) {\n const full = path.join(candidateBase, `index${ext}`);\n if (fsSync.existsSync(full)) {\n resolved = path.resolve(full).replace(/\\\\/g, '/');\n break;\n }\n }\n }\n if (!resolved && !spec.startsWith('.') && !spec.startsWith('/')) {\n resolved = resolveWithAliases(fromFile, spec, rootDir);\n }\n cache.set(key, resolved);\n return resolved;\n};\n", "/* eslint-disable import/no-extraneous-dependencies */\nimport * as fs from 'node:fs/promises';\nimport picomatch from 'picomatch';\nimport { createCoverageMap } from 'istanbul-lib-coverage';\n\nimport { relativizeForMatch } from './paths';\n\nexport const readCoverageJson = async (jsonPath: string) => {\n try {\n const txt = await fs.readFile(jsonPath, 'utf8');\n if (txt.trim().length === 0) {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n const raw = JSON.parse(txt) as unknown;\n return (raw ?? {}) as import('istanbul-lib-coverage').CoverageMapData;\n } catch {\n return {} as import('istanbul-lib-coverage').CoverageMapData;\n }\n};\n\nexport const filterCoverageMap = (\n map: import('istanbul-lib-coverage').CoverageMap,\n opts: {\n readonly includes: readonly string[];\n readonly excludes: readonly string[];\n readonly root: string;\n readonly selectionSpecified: boolean;\n },\n) => {\n const picomatchFn = picomatch as unknown as (\n globs: string | readonly string[],\n options?: { readonly nocase?: boolean; readonly dot?: boolean },\n ) => (str: string) => boolean;\n const makeMatcher = (globs: readonly string[]) =>\n globs.length === 0 ? () => true : picomatchFn(globs as string[], { dot: true, nocase: true });\n\n const includeMatch = makeMatcher(opts.includes.length ? opts.includes : ['**/*']);\n const excludeMatch = makeMatcher(opts.excludes);\n const out = createCoverageMap({});\n\n for (const absFile of map.files()) {\n const rel = relativizeForMatch(absFile, opts.root);\n const summary = map.fileCoverageFor(absFile).toSummary();\n\n const executed =\n summary.statements.covered > 0 ||\n summary.functions.covered > 0 ||\n summary.branches.covered > 0 ||\n summary.lines.covered > 0;\n\n if (executed) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n } else {\n const inc = includeMatch(rel);\n let exc = excludeMatch(rel);\n if (opts.selectionSpecified) {\n exc = /\\b(node_modules|coverage|dist|build)\\b/.test(rel) && exc;\n }\n if (inc && !exc) {\n out.addFileCoverage(map.fileCoverageFor(absFile));\n }\n }\n }\n return out;\n};\n\nexport const computeUncoveredBlocks = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly start: number; readonly end: number }> => {\n const stmtHitsById = file.data.s as Record<string, number>;\n const sm = file.data.statementMap as Record<\n string,\n { start: { line: number }; end: { line: number } }\n >;\n const missed = new Set<number>();\n for (const statementId of Object.keys(stmtHitsById)) {\n if ((stmtHitsById[statementId] ?? 0) > 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const loc = sm[statementId];\n const from = Math.max(1, loc?.start.line ?? 0);\n const to = Math.max(from, loc?.end.line ?? 0);\n for (let ln = from; ln <= to; ln += 1) {\n missed.add(ln);\n }\n }\n const lines = Array.from(missed).sort((leftLine, rightLine) => leftLine - rightLine);\n const ranges: { start: number; end: number }[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const start = lines[index]!;\n let end = start;\n while (index + 1 < lines.length && lines[index + 1] === end + 1) {\n index += 1;\n end = lines[index]!;\n }\n ranges.push({ start, end });\n }\n return ranges;\n};\n\nexport const missedBranches = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{\n readonly id: string;\n readonly line: number;\n readonly zeroPaths: readonly number[];\n}> => {\n const branchHitsById = file.data.b as Record<string, number[]>;\n const branchMap = file.data.branchMap as Record<string, { line: number }>;\n const out: { id: string; line: number; zeroPaths: number[] }[] = [];\n for (const id of Object.keys(branchHitsById)) {\n const hitsArray = branchHitsById[id] ?? [];\n const zeros: number[] = [];\n hitsArray.forEach((hits, index) => {\n if (hits === 0) {\n zeros.push(index);\n }\n });\n if (zeros.length) {\n out.push({ id, line: branchMap[id]?.line ?? 0, zeroPaths: zeros });\n }\n }\n return out.sort((firstBranch, secondBranch) => firstBranch.line - secondBranch.line);\n};\n\nexport const missedFunctions = (\n file: import('istanbul-lib-coverage').FileCoverage,\n): ReadonlyArray<{ readonly name: string; readonly line: number }> => {\n const functionHitCounts = file.data.f as Record<string, number>;\n const functionMap = file.data.fnMap as Record<string, { name: string; line: number }>;\n const out: { name: string; line: number }[] = [];\n for (const id of Object.keys(functionHitCounts)) {\n if ((functionHitCounts[id] ?? 0) === 0) {\n const meta = functionMap[id];\n out.push({ name: meta?.name ?? '(anonymous)', line: meta?.line ?? 0 });\n }\n }\n return out.sort((firstFunction, secondFunction) => firstFunction.line - secondFunction.line);\n};\n\nconst clamp = (value: number, lowerBound: number, upperBound: number) =>\n Math.max(lowerBound, Math.min(upperBound, value));\n\nexport const renderCodeFrame = (\n source: string,\n miss: { readonly start: number; readonly end: number },\n context = 3,\n): string => {\n const lines = source.split(/\\r?\\n/);\n const from = clamp(miss.start - context, 1, lines.length);\n const to = clamp(miss.end + context, 1, lines.length);\n const out: string[] = [];\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? '';\n const tag =\n ln >= miss.start && ln <= miss.end\n ? `> ${ln.toString().padStart(4)}|`\n : ` ${ln.toString().padStart(4)}|`;\n out.push(`${tag} ${body}`);\n }\n return out.join('\\n');\n};\n\nexport const compositeBarPct = (\n summary: import('istanbul-lib-coverage').CoverageSummary,\n hotspots: ReadonlyArray<{ readonly start: number; readonly end: number }>,\n): number => {\n const base = Math.min(\n Number.isFinite(summary.lines.pct) ? (summary.lines.pct as number) : 0,\n Number.isFinite(summary.functions.pct) ? (summary.functions.pct as number) : 0,\n Number.isFinite(summary.branches.pct) ? (summary.branches.pct as number) : 0,\n );\n const totalLines = (summary.lines.total ?? 0) as number;\n let penalty = 0;\n if (totalLines > 0 && hotspots.length > 0) {\n const largestRange = Math.max(...hotspots.map((range) => range.end - range.start + 1));\n const concentration = largestRange / totalLines;\n penalty = Math.min(15, Math.round(concentration * 100 * 0.5));\n }\n return Math.max(0, Math.min(100, base - penalty));\n};\n", "import * as path from \"node:path\";\nimport * as fsSync from \"node:fs\";\n\nimport { safeEnv } from \"./env-utils\";\nimport { runText } from \"./_exec\";\nimport { resolveImportWithRoot } from \"./path-resolver\";\nimport { ansi } from \"./ansi\";\nimport { tintPct } from \"./bars\";\nimport { barCell, ColumnSpec, Cell, cell, renderTable } from \"./table\";\nimport { preferredEditorHref, linkifyPadded } from \"./paths\";\nimport {\n compositeBarPct,\n computeUncoveredBlocks,\n missedBranches,\n missedFunctions,\n} from \"./coverage-core\";\n\nexport const printDetailedCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly limitPerFile: number | \"all\";\n readonly showCode: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const files = opts.map.files().sort((fileA, fileB) => {\n const summaryA = opts.map.fileCoverageFor(fileA).toSummary();\n const summaryB = opts.map.fileCoverageFor(fileB).toSummary();\n return summaryA.lines.pct - summaryB.lines.pct;\n });\n for (const abs of files) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const blocks = computeUncoveredBlocks(fc);\n const misses = missedBranches(fc);\n const missFns = missedFunctions(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const max =\n opts.limitPerFile === \"all\"\n ? Number.POSITIVE_INFINITY\n : opts.limitPerFile ?? 5;\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const topBlocks = blocks\n .slice()\n .sort(compareRangesByLengthDescThenStart)\n .slice(0, max);\n if (topBlocks.length === 0 && misses.length === 0 && missFns.length === 0) {\n console.info(ansi.dim(\" No uncovered hotspots.\"));\n console.info(\"\");\n // eslint-disable-next-line no-continue\n continue;\n }\n let src = \"\";\n if (opts.showCode && topBlocks.length > 0) {\n try {\n src = fsSync.readFileSync(abs, \"utf8\");\n } catch {\n src = \"\";\n }\n }\n for (const block of topBlocks) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n block.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${block.start}\\u001B]8;;\\u0007`;\n const label = ` ${ansi.yellow(`L${block.start}`)}\u2013${ansi.yellow(\n `L${block.end}`\n )} ${link}`;\n console.info(label);\n if (opts.showCode && src.length) {\n const lines = src.split(/\\r?\\n/);\n const from = Math.max(1, block.start - 3);\n const to = Math.min(lines.length, block.end + 3);\n for (let ln = from; ln <= to; ln += 1) {\n const body = lines[ln - 1] ?? \"\";\n const tag =\n ln >= block.start && ln <= block.end\n ? ansi.red(`>${ln.toString().padStart(4)}|`)\n : ansi.dim(` ${ln.toString().padStart(4)}|`);\n console.info(`${tag} ${body}`);\n }\n }\n }\n if (missFns.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of missFns) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`;\n console.info(` - ${fn.name} @ ${link}`);\n }\n }\n if (misses.length) {\n console.info(ansi.bold(\" Branch paths with zero hits:\"));\n for (const br of misses) {\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`;\n console.info(\n ` - branch#${br.id} @ ${link} missed paths: [${br.zeroPaths.join(\n \", \"\n )}]`\n );\n }\n }\n console.info(\"\");\n }\n};\n\nexport const printCompactCoverage = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly maxFiles?: number;\n readonly maxHotspots?: number;\n readonly pageFit?: boolean;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const terminalRows =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const reservedRows = 8;\n const availableRows = Math.max(10, terminalRows - reservedRows);\n const maxHotspotsDerived = opts.pageFit\n ? Math.max(3, Math.floor(availableRows * 0.5))\n : opts.maxHotspots ?? 8;\n const maxFunctionsDerived = opts.pageFit\n ? Math.max(2, Math.floor(availableRows * 0.25))\n : 6;\n const maxBranchesDerived = opts.pageFit\n ? Math.max(2, availableRows - maxHotspotsDerived - maxFunctionsDerived)\n : 6;\n const files = opts.map\n .files()\n .sort(\n (fileA, fileB) =>\n opts.map.fileCoverageFor(fileA).toSummary().lines.pct -\n opts.map.fileCoverageFor(fileB).toSummary().lines.pct\n );\n const fileCap = opts.maxFiles ?? files.length;\n for (const abs of files.slice(0, fileCap)) {\n const fc = opts.map.fileCoverageFor(abs);\n const sum = fc.toSummary();\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const compareRangesByLengthDescThenStart = (\n firstRange: { readonly start: number; readonly end: number },\n secondRange: { readonly start: number; readonly end: number }\n ): number => {\n const secondLength = secondRange.end - secondRange.start;\n const firstLength = firstRange.end - firstRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n };\n const blocks = computeUncoveredBlocks(fc)\n .slice()\n .sort(compareRangesByLengthDescThenStart);\n const missFns = missedFunctions(fc);\n const misses = missedBranches(fc);\n const linesPctText = `${sum.lines.pct.toFixed(1)}%`;\n const funcsPctText = `${sum.functions.pct.toFixed(1)}%`;\n const branchesPctText = `${sum.branches.pct.toFixed(1)}%`;\n const header = `${ansi.bold(rel)} lines ${tintPct(sum.lines.pct)(\n linesPctText\n )} ${barCell(compositeBarPct(sum, blocks))(\"\".padEnd(14))} funcs ${tintPct(\n sum.functions.pct\n )(funcsPctText)} branches ${tintPct(sum.branches.pct)(branchesPctText)}`;\n console.info(header);\n const hotspots = blocks.slice(0, maxHotspotsDerived);\n if (hotspots.length) {\n console.info(ansi.bold(\" Hotspots:\"));\n for (const hotspot of hotspots) {\n const len = hotspot.end - hotspot.start + 1;\n const link = `\\u001B]8;;${preferredEditorHref(\n abs,\n hotspot.start,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${hotspot.start}\\u001B]8;;\\u0007`;\n console.info(\n ` - L${hotspot.start}\u2013L${hotspot.end} (${len} lines) ${link}`\n );\n }\n }\n const functionsList = missFns.slice(0, maxFunctionsDerived);\n if (functionsList.length) {\n console.info(ansi.bold(\" Uncovered functions:\"));\n for (const fn of functionsList) {\n console.info(\n ` - ${fn.name} @ \\u001B]8;;${preferredEditorHref(\n abs,\n fn.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${fn.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const branchesList = misses.slice(0, maxBranchesDerived);\n if (branchesList.length) {\n console.info(ansi.bold(\" Branches with zero-hit paths:\"));\n for (const br of branchesList) {\n console.info(\n ` - L${br.line} branch#${br.id} missed: [${br.zeroPaths.join(\n \", \"\n )}] \\u001B]8;;${preferredEditorHref(\n abs,\n br.line,\n opts.editorCmd\n )}\\u0007${path.basename(abs)}:${br.line}\\u001B]8;;\\u0007`\n );\n }\n }\n const restHs = Math.max(0, blocks.length - hotspots.length);\n const restFns = Math.max(0, missFns.length - functionsList.length);\n const restBrs = Math.max(0, misses.length - branchesList.length);\n if (restHs + restFns + restBrs > 0) {\n console.info(\n ansi.dim(\n ` \u2026 truncated: +${restHs} hotspots, +${restFns} funcs, +${restBrs} branches`\n )\n );\n }\n console.info(\"\");\n }\n if (files.length > fileCap) {\n console.info(\n ansi.dim(\n `\u2026 ${\n files.length - fileCap\n } more files omitted (use --coverage.maxFiles or --coverage.mode=full)`\n )\n );\n }\n};\n\n// Shorten a relative path to fit within maxWidth using directory squeezing:\n// keep HEAD dirs, squeeze the MIDDLE as \"\u2026/\", keep TAIL dirs, and always\n// preserve the filename (trimming the stem token-aware as a last resort).\nconst shortenPathPreservingFilename = (\n relPath: string,\n maxWidth: number,\n opts?: {\n readonly keepHead?: number; // soft hint for starting head dirs (default 1)\n readonly keepTail?: number; // soft hint for starting tail dirs (default 1)\n readonly ellipsis?: \"\u2026\" | \"...\"; // default '\u2026'\n readonly minDirChars?: number; // minimum per-dir chars when trimmed (default 1)\n }\n): string => {\n const ellipsis = opts?.ellipsis ?? \"\u2026\";\n const START_HEAD = Math.max(0, opts?.keepHead ?? 1);\n const START_TAIL = Math.max(0, opts?.keepTail ?? 1);\n const MIN_DIR_CHARS = Math.max(1, opts?.minDirChars ?? 2);\n\n if (maxWidth <= 0) {\n return \"\";\n }\n\n const visibleWidth = (text: string): number => [...text].length;\n\n const splitMultiExt = (base: string) => {\n const endings = [\n \".test.ts\",\n \".spec.ts\",\n \".d.ts\",\n \".schema.ts\",\n \".schema.js\",\n \".config.ts\",\n \".config.js\",\n ] as const;\n for (const ending of endings) {\n if (base.endsWith(ending)) {\n return { stem: base.slice(0, -ending.length), ext: ending } as const;\n }\n }\n const ext = path.extname(base);\n return { stem: base.slice(0, -ext.length), ext } as const;\n };\n\n const sliceBalanced = (input: string, width: number): string => {\n if (visibleWidth(input) <= width) {\n return input;\n }\n if (width <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, width);\n }\n const keep = width - visibleWidth(ellipsis);\n const head = Math.ceil(keep / 2);\n const tail = Math.floor(keep / 2);\n return input.slice(0, head) + ellipsis + input.slice(-tail);\n };\n\n const tokenAwareMiddle = (stem: string, budget: number): string => {\n if (budget <= 0) {\n return \"\";\n }\n if (visibleWidth(stem) <= budget) {\n return stem;\n }\n if (budget <= visibleWidth(ellipsis)) {\n return ellipsis.slice(0, budget);\n }\n const tokens = stem.split(/([._-])/); // keep separators\n let leftIndex = 0;\n let rightIndex = tokens.length - 1;\n let left = \"\";\n let right = \"\";\n while (leftIndex <= rightIndex) {\n const tryL = left + tokens[leftIndex];\n const tryR = tokens[rightIndex] + right;\n const candL = tryL + ellipsis + right;\n const candR = left + ellipsis + tryR;\n const canL = visibleWidth(candL) <= budget;\n const canR = visibleWidth(candR) <= budget;\n if (canL && (!canR || visibleWidth(candL) >= visibleWidth(candR))) {\n left = tryL;\n leftIndex += 1;\n } else if (canR) {\n right = tryR;\n rightIndex -= 1;\n } else {\n break;\n }\n }\n const glued = left + ellipsis + right;\n if (visibleWidth(glued) < budget - 1) {\n return sliceBalanced(stem, budget);\n }\n return visibleWidth(glued) <= budget ? glued : sliceBalanced(stem, budget);\n };\n\n // Build a candidate label from split parts, collapsing duplicate ellipses\n // and removing any segments that are themselves just an ellipsis string.\n const joinParts = (\n headParts: readonly string[],\n tailParts: readonly string[],\n hideMiddle: boolean,\n baseLabel: string\n ): string => {\n const removeEllipsisSegments = (parts: readonly string[]) =>\n parts.filter((segment) => segment && segment !== ellipsis);\n const headCleaned = removeEllipsisSegments(headParts);\n const tailCleaned = removeEllipsisSegments(tailParts);\n\n const segmentsList: string[] = [];\n if (headCleaned.length) {\n segmentsList.push(headCleaned.join(\"/\"));\n }\n if (hideMiddle) {\n segmentsList.push(ellipsis);\n }\n if (tailCleaned.length) {\n segmentsList.push(tailCleaned.join(\"/\"));\n }\n segmentsList.push(baseLabel);\n\n const squashed: string[] = [];\n for (const segmentText of segmentsList) {\n const previous = squashed[squashed.length - 1];\n const isDuplicateEllipsis =\n segmentText === ellipsis && previous === ellipsis;\n if (!isDuplicateEllipsis) {\n squashed.push(segmentText);\n }\n }\n return squashed.join(\"/\");\n };\n\n // Trim shown directory names to make the candidate fit, token-aware\n const tryTrimDirsToFit = (\n headSrc: readonly string[],\n tailSrc: readonly string[],\n hideMiddle: boolean,\n baseLabel: string,\n max: number\n ): string | null => {\n const headParts = headSrc.map((segment) => segment);\n const tailParts = tailSrc.map((segment) => segment);\n let hidAny = false;\n\n const build = () => {\n const label = joinParts(\n headParts,\n tailParts,\n hideMiddle || hidAny,\n baseLabel\n );\n return { label, width: visibleWidth(label) };\n };\n\n let { label, width } = build();\n if (width <= max) {\n return label;\n }\n\n type Segment = {\n arr: string[];\n idx: number;\n original: string;\n budget: number;\n min: number;\n };\n const segments: Segment[] = [];\n headParts.forEach((part, index) =>\n segments.push({\n arr: headParts,\n idx: index,\n original: headSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n tailParts.forEach((part, index) =>\n segments.push({\n arr: tailParts,\n idx: index,\n original: tailSrc[index] ?? \"\",\n budget: visibleWidth(part),\n min: MIN_DIR_CHARS,\n })\n );\n\n let guardCounter = 200;\n while (width > max && guardCounter-- > 0) {\n let best: Segment | undefined;\n let bestSlack = 0;\n for (const seg of segments) {\n const slack = seg.budget - seg.min;\n if (slack > bestSlack) {\n bestSlack = slack;\n best = seg;\n }\n }\n if (!best) {\n break;\n }\n\n const overflow = width - max;\n const reduceBy = Math.min(overflow, best.budget - best.min);\n const nextBudget = Math.max(best.min, best.budget - reduceBy);\n\n // If the segment would shrink below the minimum per-dir chars, hide it.\n if (nextBudget < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n const trimmed = tokenAwareMiddle(best.original, nextBudget);\n if (trimmed === ellipsis || visibleWidth(trimmed) < MIN_DIR_CHARS) {\n best.arr[best.idx] = \"\";\n best.budget = 0;\n hidAny = true;\n } else {\n best.arr[best.idx] = trimmed;\n best.budget = visibleWidth(trimmed);\n }\n }\n\n ({ label, width } = build());\n if (width <= max) {\n return label;\n }\n }\n\n return null;\n };\n\n const normalized = relPath.replace(/\\\\/g, \"/\");\n if (visibleWidth(normalized) <= maxWidth) {\n return normalized;\n }\n\n const segs = normalized.split(\"/\");\n const baseName = segs.pop() ?? \"\";\n const { stem, ext } = splitMultiExt(baseName);\n const baseFull = stem + ext;\n\n if (visibleWidth(baseFull) > maxWidth) {\n const stemBudget = Math.max(1, maxWidth - visibleWidth(ext));\n return tokenAwareMiddle(stem, stemBudget) + ext;\n }\n\n if (segs.length === 0) {\n return baseFull;\n }\n\n const total = segs.length;\n let headCount = Math.min(START_HEAD, total);\n let tailCount = Math.min(START_TAIL, Math.max(0, total - headCount));\n if (tailCount === 0 && total > headCount) {\n tailCount = 1;\n }\n\n const buildRaw = (headNum: number, tailNum: number) => {\n const headRaw = segs.slice(0, headNum);\n const tailRaw = segs.slice(total - tailNum);\n const hideMiddle = headNum + tailNum < total;\n return { headRaw, tailRaw, hideMiddle } as const;\n };\n\n let { headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tailCount);\n let candidate = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (!candidate) {\n return baseFull;\n }\n\n while (headCount + tailCount < total) {\n let advanced = false;\n\n if (headCount + tailCount < total) {\n const tryTail = Math.min(tailCount + 1, total - headCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(headCount, tryTail));\n const candTail = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candTail) {\n tailCount = tryTail;\n candidate = candTail;\n advanced = true;\n }\n }\n\n if (!advanced && headCount + tailCount < total) {\n const tryHead = Math.min(headCount + 1, total - tailCount);\n ({ headRaw, tailRaw, hideMiddle } = buildRaw(tryHead, tailCount));\n const candHead = tryTrimDirsToFit(\n headRaw,\n tailRaw,\n hideMiddle,\n baseFull,\n maxWidth\n );\n if (candHead) {\n headCount = tryHead;\n candidate = candHead;\n advanced = true;\n }\n }\n\n if (!advanced) {\n break;\n }\n }\n\n if (headCount + tailCount >= total) {\n const full = `${segs.join(\"/\")}/${baseFull}`;\n return visibleWidth(full) <= maxWidth ? full : candidate;\n }\n\n return candidate;\n};\n\nconst isTestLikePath = (abs: string): boolean =>\n /(^|\\/)__tests__\\//.test(abs) ||\n /(^|\\/)tests?\\//.test(abs) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(abs);\n\n// Extract import/require/export-from specs for one file using ripgrep with timeout.\nconst extractImportSpecs = async (\n absPath: string,\n cache: Map<string, readonly string[]>\n): Promise<readonly string[]> => {\n const cached = cache.get(absPath);\n if (cached) {\n return cached;\n }\n\n const args: string[] = [\n \"--pcre2\",\n \"--no-filename\",\n \"--no-line-number\",\n \"--max-columns=200\",\n \"--max-columns-preview\",\n \"--no-messages\",\n \"-o\",\n \"--replace\",\n \"$1\",\n \"-e\",\n \"import\\\\s+[^'\\\"\\n]*from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\",\n \"-e\",\n \"require\\\\(\\\\s*['\\\"]([^'\\\"]+)['\\\"]\\\\s*\\\\)\",\n \"-e\",\n \"export\\\\s+(?:\\\\*|\\\\{[^}]*\\\\})\\\\s*from\\\\s*['\\\"]([^'\\\"]+)['\\\"]\",\n absPath,\n ];\n\n let raw = \"\";\n try {\n raw = await runText(\"rg\", args, {\n env: safeEnv(process.env, { CI: \"1\" }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 1200,\n });\n } catch {\n raw = \"\";\n }\n\n const out = raw\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .filter((spec) => spec.startsWith(\".\") || spec.startsWith(\"/\"));\n\n cache.set(absPath, out);\n return out;\n};\n\n// Build minimal import-graph distance map from a set of executed tests.\nconst buildDistanceMapFromTests = async (\n executedTestsAbs: readonly string[],\n rootDir: string\n): Promise<Map<string, number>> => {\n const dist = new Map<string, number>();\n const specsCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n const queue: Array<[string, number]> = [];\n const seen = new Set<string>();\n\n for (const testAbs of executedTestsAbs) {\n const testPathNormalized = path.resolve(testAbs).replace(/\\\\/g, \"/\");\n dist.set(testPathNormalized, 0);\n queue.push([testPathNormalized, 0]);\n }\n\n const MAX_DEPTH = 6;\n\n while (queue.length) {\n const nextItem = queue.shift();\n if (!nextItem) {\n break;\n }\n const [currentFile, currentDistance] = nextItem;\n const withinDepth = currentDistance < MAX_DEPTH;\n const notSeen = !seen.has(currentFile);\n const isRepoFile = !currentFile.includes(\"/node_modules/\");\n if (withinDepth && notSeen && isRepoFile) {\n seen.add(currentFile);\n // eslint-disable-next-line no-await-in-loop\n const specs = await extractImportSpecs(currentFile, specsCache);\n const nextDistance = currentDistance + 1;\n for (const spec of specs) {\n const resolved = resolveImportWithRoot(\n currentFile,\n spec,\n rootDir,\n resolutionCache\n );\n const usable = resolved && !resolved.includes(\"/node_modules/\");\n if (usable) {\n const existing = dist.get(resolved!);\n if (existing === undefined || nextDistance < existing) {\n dist.set(resolved!, nextDistance);\n queue.push([resolved!, nextDistance]);\n }\n }\n }\n }\n }\n\n return dist;\n};\n\nexport const renderPerFileCompositeTable = async (opts: {\n readonly absPath: string;\n readonly file: import(\"istanbul-lib-coverage\").FileCoverage;\n readonly root: string;\n readonly maxRows?: number;\n readonly maxHotspots?: number;\n readonly editorCmd?: string;\n}): Promise<void> => {\n const rel = path.relative(opts.root, opts.absPath).replace(/\\\\/g, \"/\");\n const sum = opts.file.toSummary();\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const tableBudget = Math.max(\n 14,\n Math.min(opts.maxRows ?? rowsAvail - 1, rowsAvail + 8)\n );\n const rowBudget = Math.max(6, tableBudget - 6);\n const blocks = computeUncoveredBlocks(opts.file)\n .slice()\n .sort((firstRange, secondRange) => {\n const firstLength = firstRange.end - firstRange.start;\n const secondLength = secondRange.end - secondRange.start;\n return secondLength - firstLength || firstRange.start - secondRange.start;\n });\n const missFns = missedFunctions(opts.file);\n const misses = missedBranches(opts.file);\n const total =\n typeof process.stdout.columns === \"number\" && process.stdout.columns > 20\n ? process.stdout.columns\n : 100;\n const fileMax = Math.max(32, Math.floor(total * 0.42));\n const detailMax = Math.max(20, Math.floor(total * 0.22));\n const barMax = Math.max(6, Math.floor(total * 0.06));\n const cols: readonly ColumnSpec[] = [\n { label: \"File\", min: 28, max: fileMax },\n { label: \"Section\", min: 8, max: 10 },\n { label: \"Where\", min: 10, max: 14 },\n { label: \"Lines%\", min: 6, max: 7, align: \"right\" },\n { label: \"Bar\", min: 6, max: barMax },\n { label: \"Funcs%\", min: 6, max: 7, align: \"right\" },\n { label: \"Branch%\", min: 7, max: 8, align: \"right\" },\n { label: \"Detail\", min: 18, max: detailMax },\n ];\n const rows: Cell[][] = [];\n const lPct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const fPct = Number.isFinite(sum.functions.pct) ? sum.functions.pct : 0;\n const bPct = Number.isFinite(sum.branches.pct) ? sum.branches.pct : 0;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(width);\n return linkifyPadded(opts.absPath, undefined, opts.editorCmd)(display);\n }),\n cell(\"Summary\", ansi.bold),\n cell(\"\u2014\"),\n cell(`${lPct.toFixed(1)}%`, tintPct(lPct)),\n cell(\"\".padEnd(10), barCell(compositeBarPct(sum, blocks))),\n cell(`${fPct.toFixed(1)}%`, tintPct(fPct)),\n cell(`${bPct.toFixed(1)}%`, tintPct(bPct)),\n cell(\"\"),\n ]);\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(padded.length)\n )\n ),\n cell(\"Totals\", ansi.dim),\n cell(\"\u2014\", ansi.dim),\n cell(`${lPct.toFixed(1)}%`, ansi.dim),\n cell(\"\".padEnd(10), (padded) => ansi.dim(padded)),\n cell(`${fPct.toFixed(1)}%`, ansi.dim),\n cell(`${bPct.toFixed(1)}%`, ansi.dim),\n cell(\"\"),\n ]);\n if (blocks.length || missFns.length || misses.length) {\n const wantHs = Math.min(\n typeof opts.maxHotspots === \"number\"\n ? opts.maxHotspots\n : Math.ceil(rowBudget * 0.45),\n blocks.length\n );\n if (wantHs > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Hotspots\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(largest uncovered ranges)\", ansi.dim),\n ]);\n for (const hotspotRange of blocks.slice(0, wantHs)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n hotspotRange.start,\n opts.editorCmd\n )(display);\n }),\n cell(\"Hotspot\"),\n cell(`L${hotspotRange.start}\u2013L${hotspotRange.end}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(`${hotspotRange.end - hotspotRange.start + 1} lines`),\n ]);\n }\n }\n const wantFn = Math.min(Math.ceil(rowBudget * 0.25), missFns.length);\n if (wantFn > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Functions\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(never executed)\", ansi.dim),\n ]);\n for (const missedFunction of missFns.slice(0, wantFn)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedFunction.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Func\"),\n cell(`L${missedFunction.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(missedFunction.name),\n ]);\n }\n }\n const wantBr = Math.min(Math.ceil(rowBudget * 0.2), misses.length);\n if (wantBr > 0) {\n rows.push([\n cell(rel, (padded) =>\n ansi.dim(\n shortenPathPreservingFilename(rel, padded.length).padEnd(\n padded.length\n )\n )\n ),\n cell(\"Branches\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"\", ansi.dim),\n cell(\"(paths with 0 hits)\", ansi.dim),\n ]);\n for (const missedBranch of misses.slice(0, wantBr)) {\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(\n opts.absPath,\n missedBranch.line,\n opts.editorCmd\n )(display);\n }),\n cell(\"Branch\"),\n cell(`L${missedBranch.line}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\n `#${missedBranch.id} missed [${missedBranch.zeroPaths.join(\", \")}]`\n ),\n ]);\n }\n }\n const target = rowBudget;\n if (rows.length < target) {\n const lineQueue: number[] = [];\n for (const hotspotRange of blocks) {\n for (let ln = hotspotRange.start; ln <= hotspotRange.end; ln += 1) {\n lineQueue.push(ln);\n }\n if (lineQueue.length > 5000) {\n break;\n }\n }\n while (rows.length < target && lineQueue.length) {\n const ln = lineQueue.shift()!;\n rows.push([\n cell(rel, (padded) => {\n const width = padded.length;\n const display = shortenPathPreservingFilename(rel, width).padEnd(\n width\n );\n return linkifyPadded(opts.absPath, ln, opts.editorCmd)(display);\n }),\n cell(\"Line\"),\n cell(`L${ln}`),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"uncovered\"),\n ]);\n }\n while (rows.length < target) {\n rows.push([\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n cell(\"\"),\n ]);\n }\n }\n }\n const table = renderTable(cols, rows);\n console.info(table);\n const sep = ansi.gray(\n \"\u2500\".repeat(\n Math.max(\n 20,\n typeof process.stdout.columns === \"number\"\n ? process.stdout.columns\n : 100\n )\n )\n );\n console.info(sep);\n};\n\nexport const printPerFileCompositeTables = async (opts: {\n readonly map: import(\"istanbul-lib-coverage\").CoverageMap;\n readonly root: string;\n readonly pageFit?: boolean;\n readonly maxHotspots?: number;\n readonly selectionPaths?: readonly string[];\n readonly changedFiles?: readonly string[];\n readonly executedTests?: readonly string[];\n readonly editorCmd?: string;\n}): Promise<void> => {\n const selectionAbs = (opts.selectionPaths ?? []).map((selPath) =>\n path.resolve(selPath).replace(/\\\\/g, \"/\")\n );\n const changedAbs = (opts.changedFiles ?? []).map((chgPath) =>\n path.resolve(chgPath).replace(/\\\\/g, \"/\")\n );\n const tokenizeForSimilarity = (filePathForTokens: string) =>\n new Set(\n filePathForTokens\n .toLowerCase()\n .replace(/[^a-z0-9/_\\-.]/g, \" \")\n .split(/[/_.-]+/)\n .filter(Boolean)\n );\n const jaccard = (left: Set<string>, right: Set<string>) => {\n let intersectionCount = 0;\n for (const token of left) {\n if (right.has(token)) {\n intersectionCount += 1;\n }\n }\n const unionSize = left.size + right.size - intersectionCount || 1;\n return intersectionCount / unionSize;\n };\n const isSameDirOrChild = (firstAbs: string, secondAbs: string) => {\n const dirA = path.dirname(firstAbs).replace(/\\\\/g, \"/\");\n const dirB = path.dirname(secondAbs).replace(/\\\\/g, \"/\");\n return (\n dirA === dirB ||\n dirB.startsWith(`${dirA}/`) ||\n dirA.startsWith(`${dirB}/`)\n );\n };\n const selectionTokens = selectionAbs.map(tokenizeForSimilarity);\n const changedTokens = changedAbs.map(tokenizeForSimilarity);\n const executedTestsAbs = (opts.executedTests ?? [])\n .map((testPath) => path.resolve(testPath).replace(/\\\\/g, \"/\"))\n .filter((absPath) => absPath.length > 0);\n const testTokens = executedTestsAbs.map(tokenizeForSimilarity);\n const allMapFilesAbs = opts.map\n .files()\n .map((absPath) => path.resolve(absPath).replace(/\\\\/g, \"/\"));\n const uncoveredCandidates = allMapFilesAbs.filter((absPath) => {\n const sum = opts.map.fileCoverageFor(absPath).toSummary();\n return !(\n sum.lines.pct >= 100 &&\n sum.functions.pct >= 100 &&\n sum.branches.pct >= 100\n );\n });\n let candidates: string[];\n if (selectionAbs.length > 0 || executedTestsAbs.length > 0) {\n // When tests or production paths are explicitly selected, consider ALL covered files,\n // then we'll sort by relevancy to the executed tests/selection below.\n candidates = allMapFilesAbs.slice();\n } else {\n candidates = uncoveredCandidates;\n }\n // Always exclude test-like files from candidates\n candidates = candidates.filter((abs) => !isTestLikePath(abs));\n\n // Compute relevancy of each candidate file to executed tests using import graph distance.\n // Distance tiers: 0=selected file, 1=direct from test, 2+=transitive.\n const INF = 1e9;\n const distFromTests = executedTestsAbs.length\n ? await buildDistanceMapFromTests(executedTestsAbs, opts.root)\n : new Map<string, number>();\n const selectionSetAbs = new Set(selectionAbs);\n\n type Scored = {\n abs: string;\n rel: string;\n linesPct: number;\n group: number;\n score: number;\n distance: number;\n };\n const scored: Scored[] = await Promise.all(\n candidates.map(async (abs): Promise<Scored> => {\n const rel = path.relative(opts.root, abs).replace(/\\\\/g, \"/\");\n const sum = opts.map.fileCoverageFor(abs).toSummary();\n const pct = Number.isFinite(sum.lines.pct) ? sum.lines.pct : 0;\n const absNorm = path.resolve(abs).replace(/\\\\/g, \"/\");\n const selfTokens = tokenizeForSimilarity(absNorm);\n const selSim = Math.max(\n 0,\n ...selectionTokens.map((selectionTokenSet) =>\n jaccard(selfTokens, selectionTokenSet)\n )\n );\n const chgSim = Math.max(\n 0,\n ...changedTokens.map((changedTokenSet) =>\n jaccard(selfTokens, changedTokenSet)\n )\n );\n const tstSim = Math.max(\n 0,\n ...testTokens.map((tset) => jaccard(selfTokens, tset))\n );\n const nearSelection = selectionAbs.some((selectionPath) =>\n isSameDirOrChild(absNorm, selectionPath)\n );\n const nearChanged = changedAbs.some((changedPath) =>\n isSameDirOrChild(absNorm, changedPath)\n );\n const related = selSim > 0 || chgSim > 0 || nearSelection || nearChanged;\n\n // Use precomputed distance\n const distance = selectionSetAbs.has(absNorm)\n ? 0\n : distFromTests.get(absNorm) ?? INF;\n\n let group = 6;\n if (selectionSetAbs.has(absNorm)) {\n group = 0; // selected prod file\n } else if (distance === 1) {\n group = 1; // directly imported by tests\n } else if (distance >= 2 && distance <= 3) {\n group = 2; // nearby transitive\n } else if (distance < INF) {\n group = 3; // distant transitive\n } else if (related) {\n group = 4; // path-similar only\n } else if (pct > 0) {\n group = 5; // executed but not in graph\n } else {\n group = 6;\n }\n\n // similarity to selection/changed/tests, with slight demotion for config/\n const prefixPenalty = rel.startsWith(\"config/\") ? -100 : 0;\n const score =\n Math.round(selSim * 10) +\n Math.round(chgSim * 5) +\n Math.round(tstSim * 12) +\n prefixPenalty;\n return { abs: absNorm, rel, linesPct: pct, group, score, distance };\n })\n );\n let files = scored\n .sort(\n (left, right) =>\n left.group - right.group ||\n left.distance - right.distance ||\n right.score - left.score ||\n right.linesPct - left.linesPct ||\n left.rel.localeCompare(right.rel)\n )\n .map((scoredItem) => scoredItem.abs);\n // Move directly selected production files to the very top (if present)\n if (selectionAbs.length > 0) {\n const selectionSet = new Set(selectionAbs);\n const selectedHead = files.filter((filePath) => selectionSet.has(filePath));\n const nonSelected = files.filter((filePath) => !selectionSet.has(filePath));\n files = [...selectedHead, ...nonSelected];\n }\n const rowsAvail =\n typeof process.stdout.rows === \"number\" && process.stdout.rows > 10\n ? process.stdout.rows\n : 40;\n const perFileRows = opts.pageFit\n ? Math.max(14, rowsAvail - 1)\n : rowsAvail + 8;\n for (const absolutePath of [...files].reverse()) {\n const fileCoverage = opts.map.fileCoverageFor(absolutePath);\n // Print least-relevant first, highest priority last (nearest the summary table)\n // and keep output order stable.\n // eslint-disable-next-line no-await-in-loop\n await renderPerFileCompositeTable({\n absPath: absolutePath,\n file: fileCoverage,\n root: opts.root,\n maxRows: perFileRows,\n ...(typeof opts.maxHotspots === \"number\"\n ? { maxHotspots: opts.maxHotspots }\n : {}),\n editorCmd: opts.editorCmd ?? \"\",\n });\n }\n};\n", "/* eslint-disable no-continue */\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as util from 'node:util';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport JSON5 from 'json5';\n\nimport { ansi, osc8 } from './ansi';\nimport { Colors, BackgroundColors } from './colors';\nimport { preferredEditorHref } from './paths';\nimport { collapseStacks, firstTestLocation, isStackLine, stripAnsiSimple } from './stacks';\n\n// near imports (fs already imported) \u2014 helper to find the last bridge JSON path\nconst extractBridgePath = (raw: string, cwd: string): string | null => {\n const matches = Array.from(\n raw.matchAll(/Test results written to:\\s+([^\\n\\r]+jest-bridge-[^\\s'\"]+\\.json)/g),\n );\n if (!matches.length) {\n return null;\n }\n const jsonPath = matches[matches.length - 1]![1]!.trim().replace(/^[\"'`]|[\"'`]$/g, '');\n return path.isAbsolute(jsonPath) ? jsonPath : path.resolve(cwd, jsonPath);\n};\n\n// Vitest-like formatter helpers\nexport const drawRule = (label?: string): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n if (!label) {\n return ansi.dim('\u2500'.repeat(width));\n }\n const plain = stripAnsiSimple(label);\n const pad = Math.max(1, width - plain.length - 1);\n return `${ansi.dim('\u2500'.repeat(pad))} ${label}`;\n};\n\ntype KnownEnv = NodeJS.ProcessEnv & {\n TEST_CLI_STACKS?: string;\n TEST_CLI_SUMMARY?: string;\n TEST_CLI_SHOW_CONSOLE?: string;\n NO_COLOR?: string;\n};\nconst env = process.env as unknown as KnownEnv;\n\nconst colorTokens = {\n pass: Colors.Success,\n fail: Colors.Failure,\n run: Colors.Run,\n skip: Colors.Skip,\n todo: Colors.Todo,\n passPill: (text: string) => BackgroundColors.Success(ansi.white(` ${text} `)),\n failPill: (text: string) => BackgroundColors.Failure(ansi.white(` ${text} `)),\n runPill: (text: string) => BackgroundColors.Run(ansi.white(` ${text} `)),\n};\n\nconst MAX_CONSOLE_ERRORS_TO_SHOW = 3;\n\n// Pretty diff helpers\nconst isArrayOfPrimitives = (value: unknown): value is Array<string | number | boolean | null> =>\n Array.isArray(value) &&\n value.every(\n (element) => ['string', 'number', 'boolean'].includes(typeof element) || element === null,\n );\n\ntype DiffPayload = { expected?: unknown; received?: unknown };\n\n// Normalize and indentation helpers for prettier-style rendering\nexport const indentBlock = (text: string, pad = ' '): string =>\n text\n .split('\\n')\n .map((line) => (line ? pad + line : pad.trimEnd()))\n .join('\\n');\n\nexport const prettifyPrettyFormatBlock = (raw: string): string => {\n const lines = raw.split('\\n');\n if (!lines.length) {\n return raw;\n }\n\n // Accept both pretty-format and already-normalized blocks\n const first = lines[0] ?? '';\n const isArrayStart = /^\\s*(?:Array\\s*\\[|\\[)\\s*$/.test(first);\n const isObjectStart = /^\\s*(?:Object\\s*\\{|\\{)\\s*$/.test(first);\n if (!isArrayStart && !isObjectStart) {\n return raw;\n }\n\n // Normalize the opener\n lines[0] = first\n .replace(/^(\\s*)Array\\s*\\[/, '$1[')\n .replace(/^(\\s*)Object\\s*\\{/, '$1{')\n .replace(/^\\s*\\[\\s*$/, '[')\n .replace(/^\\s*\\{\\s*$/, '{');\n\n const closingChar = isArrayStart ? ']' : '}';\n // Find the closing line\n let closeIdx = -1;\n for (let i = 1; i < lines.length; i += 1) {\n if (/^\\s*[\\]}]\\s*$/.test(lines[i]!)) {\n closeIdx = i;\n break;\n }\n }\n if (closeIdx < 0) {\n return lines.join('\\n');\n }\n\n const inner = lines.slice(1, closeIdx);\n\n // Compute the baseline indent across non-empty inner lines\n const indents: number[] = [];\n for (const lineText of inner) {\n if (lineText.trim().length === 0) {\n continue;\n }\n indents.push(lineText.match(/^\\s*/)?.[0]?.length ?? 0);\n }\n const minIndent = indents.length ? Math.min(...indents) : 0;\n\n // Re-indent so the *minimum* inner indent becomes exactly two spaces,\n // preserving relative nesting deeper than that.\n const reindented = inner.map((lineText, idx) => {\n if (lineText.trim().length === 0) {\n return lineText;\n } // keep blank lines blank\n const current = lineText.match(/^\\s*/)?.[0]?.length ?? 0;\n const rest = lineText.slice(current);\n const extra = Math.max(0, current - minIndent);\n const base = ' '; // Prettier-style 2-space base\n // Optionally remove trailing comma on the last inner item to be more Prettier-like\n const withoutDangling = idx === inner.length - 1 ? rest.replace(/,\\s*$/, '') : rest;\n return base + ' '.repeat(extra) + withoutDangling;\n });\n\n // Normalize the closer to be flush with the opener (no extra inner spaces)\n lines.splice(1, inner.length, ...reindented);\n lines[closeIdx] = closingChar;\n\n return lines.join('\\n');\n};\n\nconst normalizeBlock = (raw: string) =>\n raw\n .replace(/^\\s*Array\\s*\\[/, '[')\n .replace(/^\\s*Object\\s*\\{/, '{')\n // remove dangling commas just before ] or }\n .replace(/,(\\s*[\\]}])/g, '$1');\n\nexport const stringifyPrettierish = (value: unknown): string => {\n // strings coming from Jest diff\n if (typeof value === 'string') {\n const text = normalizeBlock(value.trim());\n if (/^[[{]/.test(text)) {\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n /* fall through */\n }\n }\n return value;\n }\n // real data: arrays/objects\n if (Array.isArray(value) || (value && typeof value === 'object')) {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n /* circulars etc \u2014 fall through */\n }\n }\n // everything else\n return util.inspect(value, { depth: 10, breakLength: Infinity, compact: false, sorted: true });\n};\n\nexport const drawFailRule = (label = ' FAIL '): string => drawRule(colorTokens.failPill(label));\n\n// NEW: plain red line rule (no label), matching Vitest section rules\nexport const drawFailLine = (): string => {\n const width = Math.max(\n 40,\n (process.stdout && (process.stdout as NodeJS.WriteStream).columns) || 80,\n );\n return colorTokens.fail('\u2500'.repeat(width));\n};\n\nexport const renderRunLine = (cwd: string): string =>\n `${colorTokens.runPill('RUN')} ${ansi.dim(cwd.replace(/\\\\/g, '/'))}`;\n\nexport const colorStackLine = (line: string, projectHint: RegExp): string => {\n const plainLine = stripAnsiSimple(line);\n if (!isStackLine(plainLine)) {\n return plainLine;\n }\n const match = plainLine.match(/\\(?([^\\s()]+):(\\d+):(\\d+)\\)?$/);\n if (!match) {\n return ansi.dim(plainLine);\n }\n const file = match[1]!.replace(/\\\\/g, '/');\n const lineNumber = match[2]!;\n const columnNumber = match[3]!;\n const coloredPath = projectHint.test(file) ? ansi.cyan(file) : ansi.dim(file);\n return plainLine.replace(\n match[0]!,\n `(${coloredPath}${ansi.dim(':')}${ansi.white(`${lineNumber}:${columnNumber}`)})`,\n );\n};\n\nexport const renderCodeFrame = (lines: readonly string[], start: number): string[] => {\n const out: string[] = [];\n for (let i = start; i < lines.length; i += 1) {\n const raw = stripAnsiSimple(lines[i]!);\n if (!raw.trim()) {\n break;\n }\n if (/^\\s*\\^+\\s*$/.test(raw)) {\n out.push(` ${colorTokens.fail(raw.trimEnd())}`);\n continue;\n }\n const pointerMatch = raw.match(/^\\s*>(\\s*\\d+)\\s*\\|\\s?(.*)$/);\n if (pointerMatch) {\n const num = ansi.dim(pointerMatch[1]!.trim());\n const code = ansi.yellow(pointerMatch[2] ?? '');\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n const normalMatch = raw.match(/^\\s*(\\d+)\\s*\\|\\s?(.*)$/);\n if (normalMatch) {\n const num = ansi.dim(normalMatch[1]!);\n const code = ansi.dim(normalMatch[2] ?? '');\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n continue;\n }\n out.push(` ${raw}`);\n }\n return out;\n};\n\n// NEW: read file lines cache + synthesized codeframe\nconst _sourceCache = new Map<string, string[]>();\nconst readSource = (file: string): string[] => {\n const normalizedFile = file.replace(/\\\\/g, '/');\n const cached = _sourceCache.get(normalizedFile);\n if (cached) {\n return cached;\n }\n try {\n const txt = fs.readFileSync(normalizedFile, 'utf8');\n const arr = txt.split(/\\r?\\n/);\n _sourceCache.set(normalizedFile, arr);\n return arr;\n } catch {\n return [];\n }\n};\n\nexport const renderSourceCodeFrame = (file: string, line: number, context = 3): string[] => {\n const lines = readSource(file);\n if (!lines.length || !Number.isFinite(line)) {\n return [];\n }\n const idx = Math.max(1, Math.min(line, lines.length));\n const start = Math.max(1, idx - context);\n const end = Math.min(lines.length, idx + context);\n\n const out: string[] = [];\n for (let currentLineNumber = start; currentLineNumber <= end; currentLineNumber += 1) {\n const num = ansi.dim(String(currentLineNumber));\n const code =\n currentLineNumber === idx\n ? ansi.yellow(lines[currentLineNumber - 1] ?? '')\n : ansi.dim(lines[currentLineNumber - 1] ?? '');\n if (currentLineNumber === idx) {\n out.push(` ${colorTokens.fail('>')} ${num} ${ansi.dim('|')} ${code}`);\n } else {\n out.push(` ${num} ${ansi.dim('|')} ${code}`);\n }\n }\n out.push(` ${colorTokens.fail('^')}`);\n return out;\n};\n\n// PATCH: deepest project frame (last match in the stack)\nconst findLastProjectFrameIndex = (lines: readonly string[], projectHint: RegExp): number => {\n for (let i = lines.length - 1; i >= 0; i -= 1) {\n const simple = stripAnsiSimple(lines[i]!);\n if (\n isStackLine(simple) &&\n projectHint.test(simple) &&\n !/node_modules|vitest|jest/.test(simple)\n ) {\n return i;\n }\n }\n return -1;\n};\n\n// NEW: short stack tail (last N frames), colored\nconst renderStackTail = (lines: readonly string[], projectHint: RegExp, max = 4): string[] => {\n const onlyStack = lines.filter((candidateLine) => isStackLine(stripAnsiSimple(candidateLine)));\n if (!onlyStack.length) {\n return [];\n }\n const tail = onlyStack.slice(-max);\n return tail.map((frameLine) => ` ${colorStackLine(frameLine, projectHint)}`);\n};\n\n// NEW: first N project frames from the stack (top-down)\nconst firstProjectFrames = (lines: readonly string[], projectHint: RegExp, max = 2): string[] => {\n const onlyStack = lines.filter((ln) => isStackLine(stripAnsiSimple(ln)));\n const projectOnly = onlyStack.filter((ln) => projectHint.test(stripAnsiSimple(ln)));\n return projectOnly.slice(0, max).map((ln) => ` ${colorStackLine(ln, projectHint)}`);\n};\n\n// NEW: extract assertion message (matcher hint + Expected/Received/diff)\nconst isTerminator = (lineText: string) => !lineText.trim() || isStackLine(lineText);\n\nexport const extractAssertionMessage = (msgLines: readonly string[]): string[] => {\n const lines = msgLines.map((rawLine: string) => stripAnsiSimple(rawLine));\n const out: string[] = [];\n\n const hintIdx = lines.findIndex(\n (candidateLine: string) =>\n /expect\\(.+?\\)\\.(?:to|not\\.)/.test(candidateLine) ||\n /\\b(?:AssertionError|Error):/.test(candidateLine),\n );\n if (hintIdx >= 0) {\n out.push(lines[hintIdx]!);\n }\n\n const collectBlock = (start: number) => {\n out.push(lines[start]!);\n for (let i = start + 1; i < lines.length; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n };\n\n const expectedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Expected:/.test(candidateLine),\n );\n const receivedIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*Received:/.test(candidateLine),\n );\n const diffIdx = lines.findIndex((candidateLine: string) =>\n /^\\s*(?:- Expected|\\+ Received|Difference:)/.test(candidateLine),\n );\n\n if (expectedIdx >= 0) {\n collectBlock(expectedIdx);\n }\n if (receivedIdx >= 0) {\n collectBlock(receivedIdx);\n }\n if (diffIdx >= 0) {\n collectBlock(diffIdx);\n }\n\n // fallback: grab up to 4 non-stack lines after hint\n if (out.length === 0 && hintIdx >= 0) {\n for (let i = hintIdx + 1; i < lines.length && out.length < 4; i += 1) {\n const candidate = lines[i]!;\n if (isTerminator(candidate)) {\n break;\n }\n out.push(candidate);\n }\n }\n return out;\n};\n\n// PATCH: convert a single stack line to \"file:line\" (for editor link)\nconst stackLocation = (line: string): { file: string; line: number } | null => {\n const match = stripAnsiSimple(line).match(/\\(?([^\\s()]+):(\\d+):\\d+\\)?$/);\n return match ? { file: match[1]!.replace(/\\\\/g, '/'), line: Number(match[2]!) } : null;\n};\nexport const JEST_BRIDGE_REPORTER_SOURCE = `const fs = require('fs');\nconst path = require('path');\n\nclass BridgeReporter {\n constructor(globalConfig, options) {\n this.out = process.env.JEST_BRIDGE_OUT || (options && options.outFile) || path.join(process.cwd(), 'coverage', 'jest-run.json');\n this.buf = { startTime: Date.now(), testResults: [], aggregated: null };\n }\n onRunStart() { this.buf.startTime = Date.now(); }\n onTestResult(_test, tr) {\n const mapAssertion = (a) => ({\n title: a.title,\n fullName: a.fullName || [...(a.ancestorTitles || []), a.title].join(' '),\n status: a.status,\n duration: a.duration || 0,\n location: a.location || null,\n failureMessages: (a.failureMessages || []).map(String),\n });\n this.buf.testResults.push({\n testFilePath: tr.testFilePath,\n status: tr.numFailingTests ? 'failed' : 'passed',\n failureMessage: tr.failureMessage || '',\n failureDetails: tr.failureDetails || [],\n console: tr.console || null,\n perfStats: tr.perfStats || {},\n testResults: (tr.testResults || []).map(mapAssertion),\n });\n }\n onRunComplete(_contexts, agg) {\n this.buf.aggregated = {\n numTotalTestSuites: agg.numTotalTestSuites,\n numPassedTestSuites: agg.numPassedTestSuites,\n numFailedTestSuites: agg.numFailedTestSuites,\n numTotalTests: agg.numTotalTests,\n numPassedTests: agg.numPassedTests,\n numFailedTests: agg.numFailedTests,\n numPendingTests: agg.numPendingTests,\n numTodoTests: agg.numTodoTests,\n startTime: agg.startTime,\n success: agg.success,\n runTimeMs: agg.testResults.reduce((t, r) => t + Math.max(0, (r.perfStats?.end || 0) - (r.perfStats?.start || 0)), 0),\n };\n fs.mkdirSync(path.dirname(this.out), { recursive: true });\n fs.writeFileSync(this.out, JSON.stringify(this.buf), 'utf8');\n }\n}\nmodule.exports = BridgeReporter;`;\n\ntype Dict = Record<string, unknown>;\n\nconst asDict = (value: unknown): Dict | null =>\n value && typeof value === 'object' ? (value as Dict) : null;\n\nconst get = (objectValue: Dict | null, key: string): unknown =>\n objectValue ? objectValue[key] : undefined;\n\nconst getStr = (objectValue: Dict | null, key: string): string | undefined => {\n const candidate = get(objectValue, key);\n return typeof candidate === 'string' ? candidate : undefined;\n};\n\nexport function linesFromDetails(details: readonly unknown[] | undefined): {\n stacks: string[];\n messages: string[];\n} {\n const stacks: string[] = [];\n const messages: string[] = [];\n if (!details) {\n return { stacks, messages };\n }\n\n const pushMaybe = (value: unknown, bucket: string[]) => {\n if (typeof value === 'string' && value.trim()) {\n bucket.push(...value.split(/\\r?\\n/));\n }\n };\n\n for (const detail of details) {\n if (typeof detail === 'string') {\n if (/\\s+at\\s.+\\(.+:\\d+:\\d+\\)/.test(detail)) {\n pushMaybe(detail, stacks);\n } else {\n pushMaybe(detail, messages);\n }\n continue;\n }\n const dict = asDict(detail);\n if (dict) {\n pushMaybe(getStr(dict, 'stack'), stacks);\n pushMaybe(getStr(dict, 'message'), messages);\n\n const err = asDict(get(dict, 'error'));\n pushMaybe(getStr(err, 'stack'), stacks);\n pushMaybe(getStr(err, 'message'), messages);\n\n const matcherResult = asDict(get(dict, 'matcherResult'));\n pushMaybe(getStr(matcherResult, 'stack'), stacks);\n pushMaybe(getStr(matcherResult, 'message'), messages);\n pushMaybe(getStr(matcherResult, 'expected'), messages);\n pushMaybe(getStr(matcherResult, 'received'), messages);\n }\n }\n return { stacks, messages };\n}\n\n// NEW: choose a label that matches the payload\nexport function labelForMessage(lines: readonly string[]): string {\n const joined = lines.join(' ');\n const matched =\n joined.match(/\\b(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/) ||\n joined.match(/\\bError\\b/);\n if (matched) {\n const typeName = (matched[1] as string | undefined) ?? 'Error';\n return `${typeName}:`;\n }\n return /expect\\(.+?\\)\\.(?:to|not\\.)/.test(joined) ? 'Assertion:' : 'Message:';\n}\n\n/** Try to pull rich expected/received from\n * failureDetails.matcherResult; else sniff from message lines */\nexport function extractExpectedReceived(\n details?: readonly unknown[],\n lines?: readonly string[],\n): DiffPayload {\n if (details) {\n for (const detail of details) {\n const dict = asDict(detail);\n const matcherResult = dict && asDict(get(dict, 'matcherResult'));\n if (matcherResult) {\n const expected = get(matcherResult, 'expected');\n const received = get(matcherResult, 'received');\n if (expected !== undefined || received !== undefined) {\n return { expected, received };\n }\n }\n }\n }\n if (lines && lines.length) {\n const expectedLines: string[] = [];\n const receivedLines: string[] = [];\n let mode: 'none' | 'exp' | 'rec' = 'none';\n for (const rawLine of lines) {\n const simple = stripAnsiSimple(rawLine);\n if (/^\\s*Expected:/.test(simple)) {\n mode = 'exp';\n expectedLines.push(simple.replace(/^\\s*Expected:\\s*/, ''));\n continue;\n }\n if (/^\\s*Received:/.test(simple)) {\n mode = 'rec';\n receivedLines.push(simple.replace(/^\\s*Received:\\s*/, ''));\n continue;\n }\n if (/^\\s*[-+]\\s/.test(simple)) {\n continue;\n }\n if (!simple.trim()) {\n mode = 'none';\n } else if (mode === 'exp') {\n expectedLines.push(simple);\n } else if (mode === 'rec') {\n receivedLines.push(simple);\n }\n }\n if (expectedLines.length || receivedLines.length) {\n return { expected: expectedLines.join('\\n'), received: receivedLines.join('\\n') };\n }\n const unified = extractFromUnifiedDiff(lines);\n if (unified.expected !== undefined || unified.received !== undefined) {\n return unified;\n }\n }\n return {};\n}\n\nexport function extractFromUnifiedDiff(rawLines: readonly string[]): {\n expected?: string;\n received?: string;\n} {\n const lines = rawLines.map((lineText) => stripAnsiSimple(lineText));\n\n // Find the first pretty-format block start, signed or unsigned\n let startIndex = -1;\n for (let i = 0; i < lines.length; i += 1) {\n const lt = lines[i]!;\n if (/^\\s*(?:[-+]\\s*)?(Array\\s*\\[|Object\\s*\\{)/.test(lt)) {\n startIndex = i;\n break;\n }\n }\n if (startIndex < 0) {\n return {};\n }\n\n const expectedParts: string[] = [];\n const receivedParts: string[] = [];\n\n let opened = false;\n let expDone = false;\n let recDone = false;\n const canParseJsonish = (input: string): boolean => {\n const text = normalizeBlock(input).trim();\n try {\n JSON5.parse(text);\n return true;\n } catch {\n return false;\n }\n };\n\n for (let i = startIndex; i < lines.length; i += 1) {\n const lineText = lines[i]!;\n const unsigned = lineText.replace(/^\\s*[-+]\\s?/, '');\n const isMinus = /^\\s*-\\s/.test(lineText);\n const isPlus = /^\\s*\\+\\s/.test(lineText);\n\n if (!opened) {\n const looksLikeStart = /^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(unsigned);\n if (!looksLikeStart) {\n // Skip unrelated lines before the pretty block\n continue;\n }\n opened = true;\n }\n\n if (isMinus) {\n expectedParts.push(unsigned);\n } else if (isPlus) {\n receivedParts.push(unsigned);\n } else {\n expectedParts.push(unsigned);\n receivedParts.push(unsigned);\n }\n\n if (!expDone && expectedParts.length > 0) {\n const expJoined = expectedParts.join('\\n');\n expDone = canParseJsonish(expJoined);\n }\n if (!recDone && receivedParts.length > 0) {\n const recJoined = receivedParts.join('\\n');\n recDone = canParseJsonish(recJoined);\n }\n if (opened && expDone && recDone) {\n break;\n }\n }\n\n const toJsonLikeString = (joined: string | undefined): string | undefined => {\n if (!joined) {\n return undefined;\n }\n const text = normalizeBlock(joined).trim();\n try {\n const parsed = JSON5.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return text;\n }\n };\n\n const expected = expectedParts.length ? expectedParts.join('\\n') : undefined;\n const received = receivedParts.length ? receivedParts.join('\\n') : undefined;\n const result: { expected?: string; received?: string } = {};\n const expStr = toJsonLikeString(expected);\n const recStr = toJsonLikeString(received);\n if (expStr !== undefined) {\n result.expected = expStr;\n }\n if (recStr !== undefined) {\n result.received = recStr;\n }\n return result;\n}\n\nfunction renderPrettyDiff(payload: DiffPayload): string[] {\n const out: string[] = [];\n const { expected, received } = payload;\n if (expected === undefined && received === undefined) {\n return out;\n }\n\n const expectedString = stringifyPrettierish(expected);\n const receivedString = stringifyPrettierish(received);\n\n out.push(\n ` ${ansi.bold('Expected')} ${ansi.dim(\n expected && Array.isArray(expected) ? `(len ${(expected as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.pass(expectedString)));\n out.push(\n ` ${ansi.bold('Received')} ${ansi.dim(\n received && Array.isArray(received) ? `(len ${(received as unknown[]).length})` : '',\n )}`,\n );\n out.push(indentBlock(colorTokens.fail(receivedString)));\n\n if (isArrayOfPrimitives(expected) && isArrayOfPrimitives(received)) {\n const expectedSet = new Set(expected.map((element) => String(element)));\n const receivedSet = new Set(received.map((element) => String(element)));\n const missing = [...expectedSet].filter((element) => !receivedSet.has(element));\n const unexpected = [...receivedSet].filter((element) => !expectedSet.has(element));\n const parts: string[] = [];\n if (missing.length) {\n parts.push(\n `${missing.length} missing: ${missing\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${missing.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (unexpected.length) {\n parts.push(\n `${unexpected.length} unexpected: ${unexpected\n .slice(0, 3)\n .map((element) => JSON.stringify(element))\n .join(', ')}${unexpected.length > 3 ? '\u2026' : ''}`,\n );\n }\n if (parts.length) {\n out.push(` ${ansi.dim('Difference:')} ${colorTokens.fail(parts.join(ansi.dim(' | ')))}`);\n }\n }\n\n out.push('');\n return out;\n}\n\nfunction pickPrimaryMessage(\n candidateMessageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n): string[] {\n const extracted = extractAssertionMessage(candidateMessageLines);\n if (extracted.length) {\n return extracted;\n }\n const errorLine = details.messages.find((lineText) =>\n /\\b(?:Error|TypeError|ReferenceError|SyntaxError|RangeError|AssertionError)\\b/.test(lineText),\n );\n if (errorLine) {\n return [errorLine];\n }\n const firstNonEmpty = details.messages.find((lineText) => lineText.trim().length);\n if (firstNonEmpty) {\n return [firstNonEmpty];\n }\n return [];\n}\n\nfunction colorUnifiedDiffLine(simple: string): string {\n if (/^\\s*-\\s/.test(simple)) {\n return colorTokens.fail(simple);\n }\n if (/^\\s*\\+\\s/.test(simple)) {\n return colorTokens.pass(simple);\n }\n return simple;\n}\n\nexport type Loc = { file: string; line: number };\n\nexport type BuildCtx = {\n readonly projectHint: RegExp;\n readonly editorCmd: string | undefined;\n readonly showStacks: boolean;\n};\n\nexport const findCodeFrameStart = (lines: readonly string[]): number =>\n lines.findIndex((line) => /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(line)));\n\nexport const deepestProjectLoc = (\n stackLines: readonly string[],\n projectHint: RegExp,\n): Loc | null => {\n const idx = findLastProjectFrameIndex(stackLines, projectHint);\n return idx >= 0 ? stackLocation(stackLines[idx]!) : null;\n};\n\nexport const buildCodeFrameSection = (\n messageLines: readonly string[],\n ctx: BuildCtx,\n synthLoc?: Loc | null,\n): string[] => {\n const lines: string[] = [];\n const start = findCodeFrameStart(messageLines);\n if (start >= 0) {\n lines.push(...renderCodeFrame(messageLines, start), '');\n return lines;\n }\n if (ctx.showStacks && synthLoc) {\n lines.push(...renderSourceCodeFrame(synthLoc.file, synthLoc.line), '');\n }\n return lines;\n};\n\nexport const buildPrettyDiffSection = (\n details?: readonly unknown[],\n messageLines?: readonly string[],\n): string[] => renderPrettyDiff(extractExpectedReceived(details, messageLines));\n\nexport const buildMessageSection = (\n messageLines: readonly string[],\n details: ReturnType<typeof linesFromDetails>,\n ctx: BuildCtx,\n opts?: { suppressDiff?: boolean; stackPreview?: readonly string[] },\n): string[] => {\n const out: string[] = [];\n\n const primary = pickPrimaryMessage(messageLines, details);\n\n const filtered = opts?.suppressDiff\n ? primary.filter((raw) => {\n const simple = stripAnsiSimple(raw);\n return (\n !/^\\s*(Expected:|Received:|Difference:)\\b/.test(simple) &&\n !/^\\s*[-+]\\s/.test(simple) &&\n !/^\\s*(Array\\s*\\[|Object\\s*\\{)/.test(simple)\n );\n })\n : primary;\n\n if (filtered.length) {\n const label = labelForMessage(filtered);\n out.push(` ${ansi.bold(label)}`);\n for (const lineText of filtered) {\n out.push(` ${ansi.yellow(colorUnifiedDiffLine(lineText))}`);\n }\n if (opts?.stackPreview && opts.stackPreview.length) {\n for (const frame of opts.stackPreview) {\n out.push(frame);\n }\n }\n out.push('');\n }\n return out;\n};\n\ntype ConsoleEntry = Readonly<{\n type?: unknown;\n message?: unknown;\n origin?: unknown;\n}>;\n\nfunction isConsoleEntry(candidate: unknown): candidate is ConsoleEntry {\n return typeof candidate === 'object' && candidate !== null;\n}\n\nexport const buildConsoleSection = (maybeConsole: unknown): string[] => {\n const out: string[] = [];\n if (!Array.isArray(maybeConsole)) {\n return out;\n }\n\n const entries = maybeConsole.filter(isConsoleEntry);\n\n const errorsOnly = entries.filter((entry) => {\n const val = entry?.type;\n return String(val ?? '').toLowerCase() === 'error';\n });\n const scored = errorsOnly\n .map((entry) => {\n const raw = entry?.message as unknown;\n const msg = Array.isArray(raw)\n ? raw.map(String).join(' ')\n : typeof raw === 'string'\n ? raw\n : String(raw ?? '');\n return { msg, score: msg.length };\n })\n .filter((item) => item.msg.trim().length > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, MAX_CONSOLE_ERRORS_TO_SHOW);\n if (scored.length) {\n out.push(ansi.dim(' Console errors:'));\n for (const item of scored) {\n out.push(` ${ansi.dim('\u2022')} ${item.msg}`);\n }\n out.push('');\n }\n return out;\n};\n\nexport const buildStackSection = (\n mergedForStack: readonly string[],\n ctx: BuildCtx,\n fallbackLoc?: Loc | null,\n): string[] => {\n const out: string[] = [];\n out.push(ansi.dim(' Stack:'));\n if (!ctx.showStacks) {\n out.push(` ${ansi.dim('(hidden by TEST_CLI_STACKS=)')}`, '');\n return out;\n }\n const tail = renderStackTail(mergedForStack, ctx.projectHint, 4);\n if (tail.length) {\n out.push(...tail);\n const loc = deepestProjectLoc(mergedForStack, ctx.projectHint);\n if (loc) {\n const href = preferredEditorHref(loc.file, loc.line, ctx.editorCmd);\n out.push(` ${ansi.dim('at')} ${osc8(`${path.basename(loc.file)}:${loc.line}`, href)}`);\n }\n out.push('');\n return out;\n }\n if (fallbackLoc) {\n out.push(\n ` ${colorStackLine(`${fallbackLoc.file}:${fallbackLoc.line}:0`, ctx.projectHint)}`,\n '',\n );\n return out;\n }\n out.push(` ${ansi.dim('(no stack provided)')}`, '');\n return out;\n};\n\nexport const buildFileBadgeLine = (rel: string, failedCount: number): string =>\n failedCount > 0\n ? `${colorTokens.failPill('FAIL')} ${ansi.white(rel)}`\n : `${colorTokens.passPill('PASS')} ${ansi.white(rel)}`;\n\nexport const buildPerFileOverview = (\n rel: string,\n assertions: readonly { readonly fullName: string; readonly status: string }[],\n): string[] => {\n const out: string[] = [];\n out.push(`${ansi.magenta(rel)} ${ansi.dim(`(${assertions.length})`)}`);\n for (const assertion of assertions) {\n const name = assertion.fullName;\n if (assertion.status === 'passed') {\n out.push(` ${colorTokens.pass('\u2713')} ${ansi.dim(name)}`);\n } else if (assertion.status === 'todo') {\n out.push(` ${colorTokens.todo('\u2610')} ${ansi.dim(name)} ${colorTokens.todo('[todo]')}`);\n } else if (assertion.status === 'pending') {\n out.push(` ${colorTokens.skip('\u2193')} ${ansi.dim(name)} ${colorTokens.skip('[skipped]')}`);\n } else {\n out.push(` ${colorTokens.fail('\u00D7')} ${ansi.white(name)}`);\n }\n }\n out.push('');\n return out;\n};\n\nexport const formatJestOutputVitest = (\n raw: string,\n opts?: { readonly cwd?: string; readonly editorCmd?: string },\n): string => {\n const showStacks = Boolean(env.TEST_CLI_STACKS);\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const lines = raw.split(/\\r?\\n/);\n const out: string[] = [];\n const seenFailures = new Set<string>();\n const seenFiles = new Set<string>();\n for (let lineIndex = 0; lineIndex < lines.length; ) {\n const ln = stripAnsiSimple(lines[lineIndex]!);\n if (/^\\s*\u25CF\\s+/.test(ln)) {\n const title = ln.replace(/^\\s*\u25CF\\s+/, '').trim();\n const block: string[] = [lines[lineIndex]!];\n let scanIndex = lineIndex + 1;\n while (scanIndex < lines.length) {\n const scanLine = stripAnsiSimple(lines[scanIndex]!);\n const nextIsStart =\n /^\\s*\u25CF\\s+/.test(scanLine) ||\n /^\\s*(PASS|FAIL)\\s/.test(scanLine) ||\n /^\\s*Test Suites:/.test(scanLine);\n if (nextIsStart && stripAnsiSimple(lines[scanIndex - 1] ?? '').trim() === '') {\n break;\n }\n block.push(lines[scanIndex]!);\n scanIndex += 1;\n }\n const codeFrameStart = block.findIndex((candidateLine) =>\n /^\\s*(>?\\s*\\d+\\s*\\|)/.test(stripAnsiSimple(candidateLine)),\n );\n const location = firstTestLocation(block, projectHint);\n const rel = location\n ? location.split(':')[0]!.replace(/\\\\/g, '/').replace(`${cwd}/`, '')\n : '';\n const key = `${rel}|${title}`;\n if (seenFailures.has(key)) {\n lineIndex = scanIndex;\n continue;\n }\n seenFailures.add(key);\n out.push(drawFailLine());\n const header = `${colorTokens.fail('\u00D7')} ${ansi.white(rel ? `${rel} > ${title}` : title)}`;\n out.push(header);\n // Reordered block: header already printed \u2192 codeframe \u2192 pretty diff \u2192 message \u2192 stack\n const linesBlock = block.map(String);\n const collapsedForSrc = collapseStacks(linesBlock.slice(0));\n // 1) Codeframe (embedded or synthesized)\n if (codeFrameStart >= 0) {\n out.push('');\n out.push(...renderCodeFrame(linesBlock, codeFrameStart));\n out.push('');\n } else if (showStacks) {\n const deepestIdxForSrc = findLastProjectFrameIndex(collapsedForSrc, projectHint);\n const locForSrc =\n deepestIdxForSrc >= 0 ? stackLocation(collapsedForSrc[deepestIdxForSrc]!) : null;\n if (locForSrc) {\n out.push('');\n out.push(...renderSourceCodeFrame(locForSrc.file, locForSrc.line));\n out.push('');\n }\n }\n // 2) Pretty Expected/Received\n const payload = extractExpectedReceived(undefined, linesBlock);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n // 3) Message with label + inline top project frames\n const detailsForMsg = linesFromDetails(undefined);\n const collapsedForTail = collapseStacks(linesBlock.slice(0));\n const stackPreview = showStacks ? firstProjectFrames(collapsedForTail, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(\n linesBlock,\n detailsForMsg,\n { projectHint, editorCmd: opts?.editorCmd, showStacks },\n { suppressDiff: hasPretty, stackPreview },\n ),\n );\n\n // 4) Stack tail last \u2014 only if we didn\u2019t inline a preview\n if (showStacks && stackPreview.length === 0) {\n const collapsed = collapseStacks(linesBlock.slice(0));\n out.push(\n ...buildStackSection(collapsed, {\n projectHint,\n editorCmd: opts?.editorCmd,\n showStacks,\n }),\n );\n }\n out.push(drawFailLine());\n out.push('');\n lineIndex = scanIndex;\n continue;\n }\n const passFail = ln.match(/^\\s*(PASS|FAIL)\\s+(.+)$/);\n if (passFail) {\n const badge = passFail[1]!;\n const fileAbs = passFail[2]!;\n const rel = fileAbs.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n if (seenFiles.has(rel)) {\n lineIndex += 1;\n continue;\n }\n seenFiles.add(rel);\n const pill = badge === 'PASS' ? colorTokens.passPill('PASS') : colorTokens.failPill('FAIL');\n out.push(`${pill} ${ansi.white(rel)}`);\n lineIndex += 1;\n continue;\n }\n if (/^\\s*(Test Suites:|Tests:|Snapshots:|Time:|Ran all)/.test(ln)) {\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n continue;\n }\n if (isStackLine(ln)) {\n if (showStacks) {\n const kept = collapseStacks([lines[lineIndex]!]);\n out.push(...kept);\n }\n lineIndex += 1;\n continue;\n }\n out.push(lines[lineIndex]!);\n lineIndex += 1;\n }\n const rendered = out.join('\\n');\n // Detect if no test sections were parsed from the live stream and fall back to JSON rendering\n const hadParsedTests =\n seenFiles.size > 0 ||\n seenFailures.size > 0 ||\n out.some((lineText) => /^(?:\\s*)(PASS|FAIL)\\b/.test(stripAnsiSimple(lineText)));\n\n if (!hadParsedTests) {\n const bridgePath = extractBridgePath(raw, cwd);\n if (bridgePath && fs.existsSync(bridgePath)) {\n try {\n const json = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));\n const bridge = coerceJestJsonToBridge(json);\n const renderedFromJson = renderVitestFromJestJSON(bridge, opts);\n const prefix = out.join('\\n');\n return prefix ? `${prefix}\\n${renderedFromJson}` : renderedFromJson;\n } catch {\n // if JSON load fails, fall through to the minimal stream output\n }\n }\n }\n try {\n const preview = rendered.split('\\n').slice(0, 2).join('\\n');\n // eslint-disable-next-line no-console\n console.info(`formatJestOutputVitest: produced ${out.length} lines; preview:\\n${preview}`);\n } catch {\n /* no-op */\n }\n return rendered;\n};\n\nexport type BridgeJSON = {\n startTime: number;\n testResults: Array<{\n testFilePath: string;\n status: 'passed' | 'failed';\n failureMessage: string;\n failureDetails?: unknown[];\n console?: Array<{ message?: string; type?: string; origin?: string }> | null;\n testResults: Array<{\n fullName: string;\n status: string;\n duration: number;\n location: { line: number; column: number } | null;\n failureMessages: string[];\n }>;\n }>;\n aggregated: {\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n startTime: number;\n success: boolean;\n runTimeMs?: number;\n };\n};\n\ntype JestAssertionResult = {\n title: string;\n ancestorTitles: string[];\n status: string;\n location?: { line: number; column: number } | null;\n failureMessages?: string[];\n fullName?: string;\n duration?: number;\n};\n\ntype JestTestResultExtra = {\n readonly failureDetails?: unknown[];\n readonly console?: ReadonlyArray<{\n message?: unknown;\n type?: unknown;\n origin?: unknown;\n }> | null;\n readonly perfStats?: Readonly<Record<string, unknown>>;\n};\n\ntype JestTestResult = {\n testFilePath?: string;\n name?: string;\n status: 'passed' | 'failed';\n failureMessage?: string;\n assertionResults?: JestAssertionResult[];\n} & JestTestResultExtra;\n\ntype JestAggregatedResult = {\n startTime: number;\n success: boolean;\n numTotalTestSuites: number;\n numPassedTestSuites: number;\n numFailedTestSuites: number;\n numTotalTests: number;\n numPassedTests: number;\n numFailedTests: number;\n numPendingTests: number;\n numTodoTests: number;\n testResults: JestTestResult[];\n};\n\nconst isBridgeJSONLike = (candidate: unknown): candidate is BridgeJSON => {\n const candidateValue = candidate as Record<string, unknown> | null;\n return (\n typeof candidateValue === 'object' &&\n candidateValue !== null &&\n 'aggregated' in (candidateValue as Record<string, unknown>)\n );\n};\n\nexport function coerceJestJsonToBridge(raw: unknown): BridgeJSON {\n if (isBridgeJSONLike(raw)) {\n return raw as BridgeJSON;\n }\n const j = raw as JestAggregatedResult;\n if (!j || !Array.isArray(j.testResults)) {\n throw new Error('Unexpected Jest JSON shape');\n }\n return {\n startTime: Number(j.startTime ?? Date.now()),\n testResults: j.testResults.map((testFileResult) => ({\n testFilePath: testFileResult.testFilePath || testFileResult.name || '',\n status: testFileResult.status,\n failureMessage: testFileResult.failureMessage || '',\n failureDetails: testFileResult.failureDetails ?? [],\n testResults: (testFileResult.assertionResults || []).map((assertion) => ({\n title: assertion.title,\n fullName:\n assertion.fullName || [...(assertion.ancestorTitles || []), assertion.title].join(' '),\n status: assertion.status,\n duration: assertion.duration || 0,\n location: assertion.location ?? null,\n failureMessages: assertion.failureMessages || [],\n })),\n })),\n aggregated: {\n numTotalTestSuites: j.numTotalTestSuites,\n numPassedTestSuites: j.numPassedTestSuites,\n numFailedTestSuites: j.numFailedTestSuites,\n numTotalTests: j.numTotalTests,\n numPassedTests: j.numPassedTests,\n numFailedTests: j.numFailedTests,\n numPendingTests: j.numPendingTests,\n numTodoTests: j.numTodoTests,\n startTime: j.startTime,\n success: j.success,\n },\n };\n}\n\nconst vitestFooter = (\n agg: BridgeJSON['aggregated'],\n _startedAt?: number,\n durationMs?: number,\n): string => {\n const files = [\n agg.numFailedTestSuites ? colorTokens.fail(`${agg.numFailedTestSuites} failed`) : '',\n agg.numPassedTestSuites ? colorTokens.pass(`${agg.numPassedTestSuites} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const tests = [\n agg.numFailedTests ? colorTokens.fail(`${agg.numFailedTests} failed`) : '',\n agg.numPassedTests ? colorTokens.pass(`${agg.numPassedTests} passed`) : '',\n agg.numPendingTests ? colorTokens.skip(`${agg.numPendingTests} skipped`) : '',\n agg.numTodoTests ? colorTokens.todo(`${agg.numTodoTests} todo`) : '',\n ]\n .filter(Boolean)\n .join(ansi.dim(' | '));\n\n const durMs =\n typeof durationMs === 'number'\n ? durationMs\n : typeof agg.runTimeMs === 'number'\n ? agg.runTimeMs\n : undefined;\n const time = durMs != null ? `${Math.max(0, Math.round(durMs))}ms` : '';\n const thread = ansi.dim('(in thread 0ms, 0.00%)');\n\n return [\n `${ansi.bold('Test Files')} ${files} ${ansi.dim(`(${agg.numTotalTestSuites})`)}`,\n `${ansi.bold('Tests')} ${tests} ${ansi.dim(`(${agg.numTotalTests})`)}`,\n `${ansi.bold('Time')} ${time} ${thread}`,\n ].join('\\n');\n};\n\nexport function renderVitestFromJestJSON(\n data: BridgeJSON,\n opts?: { cwd?: string; editorCmd?: string },\n): string {\n const cwd = (opts?.cwd ?? process.cwd()).replace(/\\\\/g, '/');\n const projectHint = new RegExp(\n `(${cwd.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\$&')})|(/gigworx-node/)`,\n );\n const ctx: BuildCtx = { projectHint, editorCmd: opts?.editorCmd, showStacks: true };\n const out: string[] = [];\n // Top RUN line\n out.push(renderRunLine(cwd));\n out.push('');\n for (const file of data.testResults) {\n const rel = file.testFilePath.replace(/\\\\/g, '/').replace(`${cwd}/`, '');\n const failed = file.testResults.filter((assertion) => assertion.status === 'failed');\n // Per-file overview list\n out.push(...buildPerFileOverview(rel, file.testResults));\n // File header block with PASS/FAIL badge\n out.push(buildFileBadgeLine(rel, failed.length));\n // Only render file-level failure when there are NO per-assertion failures\n if (file.failureMessage && failed.length === 0) {\n const lines = file.failureMessage.split(/\\r?\\n/);\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...lines, ...details.stacks]);\n const synthLoc = deepestProjectLoc(mergedForStack, projectHint);\n out.push(...buildCodeFrameSection(lines, ctx, synthLoc));\n\n const payload = extractExpectedReceived(file.failureDetails, lines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(lines, details, ctx, {\n suppressDiff: hasPretty,\n stackPreview,\n }),\n );\n out.push(...buildConsoleSection(file.console ?? null));\n\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(...buildStackSection(mergedForStack, ctx));\n }\n }\n for (const failedAssertion of failed) {\n out.push(drawFailLine());\n const header = `${rel} > ${failedAssertion.fullName}`;\n const messagesArray: string[] =\n failedAssertion.failureMessages.length > 0 ? failedAssertion.failureMessages : [''];\n const details = linesFromDetails(file.failureDetails);\n const mergedForStack = collapseStacks([...messagesArray, ...details.stacks]);\n const deepestLoc = deepestProjectLoc(mergedForStack, projectHint);\n const locLink =\n deepestLoc &&\n (() => {\n const href = preferredEditorHref(deepestLoc.file, deepestLoc.line, opts?.editorCmd);\n const base = `${path.basename(deepestLoc.file)}:${deepestLoc.line}`;\n return osc8(base, href);\n })();\n const headerLine = `${ansi.white(header)}${locLink ? ` ${ansi.dim(`(${locLink})`)}` : ''}`;\n const bullet = (text: string) => `${colorTokens.fail('\u00D7')} ${ansi.white(text)}`;\n out.push(bullet(headerLine));\n const msgLines = messagesArray.join('\\n').split('\\n');\n const assertFallback =\n deepestLoc ||\n (failedAssertion.location && {\n file: file.testFilePath,\n line: failedAssertion.location.line,\n });\n out.push('', ...buildCodeFrameSection(msgLines, ctx, assertFallback), '');\n\n const payload = extractExpectedReceived(file.failureDetails, msgLines);\n const hasPretty = payload.expected !== undefined || payload.received !== undefined;\n out.push(...renderPrettyDiff(payload));\n\n const stackPreview = ctx.showStacks ? firstProjectFrames(mergedForStack, projectHint, 2) : [];\n out.push(\n ...buildMessageSection(msgLines, details, ctx, { suppressDiff: hasPretty, stackPreview }),\n );\n if (ctx.showStacks && stackPreview.length === 0) {\n out.push(\n ...buildStackSection(\n mergedForStack,\n ctx,\n failedAssertion.location\n ? { file: file.testFilePath, line: failedAssertion.location.line }\n : null,\n ),\n );\n }\n out.push(drawFailLine());\n out.push('');\n }\n }\n // Dashed rule + right-aligned pill\n const failedCount = data.aggregated.numFailedTests;\n out.push(drawRule(colorTokens.failPill(` Failed Tests ${failedCount} `)));\n out.push('');\n const footer = vitestFooter(\n data.aggregated,\n data.aggregated?.startTime ?? data.startTime,\n data.aggregated?.runTimeMs,\n );\n return `${out.join('\\n')}\\n${footer}`;\n}\n", "/* eslint-disable no-continue */\n/* eslint-disable import/no-extraneous-dependencies */\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as fsSync from 'node:fs';\nimport { createCoverageMap } from 'istanbul-lib-coverage';\nimport * as fs from 'node:fs/promises';\n\nimport * as LibReport from 'istanbul-lib-report';\nimport * as Reports from 'istanbul-reports';\n\nimport { safeEnv } from './env-utils';\nimport { runExitCode, runText, runWithCapture } from './_exec';\nimport { deriveArgs } from './args';\nimport {\n findRepoRoot,\n argsForDiscovery,\n discoverJestResilient,\n filterCandidatesForProject,\n decideShouldRunJest,\n} from './discovery';\nimport { readCoverageJson, filterCoverageMap } from './coverage-core';\nimport {\n printPerFileCompositeTables,\n printCompactCoverage,\n printDetailedCoverage,\n} from './coverage-print';\nimport {\n JEST_BRIDGE_REPORTER_SOURCE,\n renderVitestFromJestJSON,\n coerceJestJsonToBridge,\n formatJestOutputVitest,\n} from './jest-bridge';\nimport { stripAnsiSimple } from './stacks';\nimport { tintPct } from './bars';\nimport { selectDirectTestsForProduction } from './graph-distance';\n\nconst jestBin = './node_modules/.bin/jest';\nconst babelNodeBin = './node_modules/.bin/babel-node';\nconst moduleSpecifierForRequire =\n // @ts-ignore\n typeof __filename !== 'undefined' ? __filename : (import.meta as any).url;\n\nexport const registerSignalHandlersOnce = () => {\n let handled = false;\n const on = (sig: NodeJS.Signals) => {\n if (handled) {\n return;\n }\n handled = true;\n process.stdout.write(`\\nReceived ${sig}, exiting...\\n`);\n process.exit(130);\n };\n process.once('SIGINT', on);\n process.once('SIGTERM', on);\n};\n\nconst isDebug = (): boolean =>\n Boolean((process.env as unknown as { TEST_CLI_DEBUG?: string }).TEST_CLI_DEBUG);\n\nexport const mergeLcov = async (): Promise<void> => {\n const jestLcovPath = 'coverage/jest/lcov.info';\n const vitestLcovPath = 'coverage/vitest/lcov.info';\n const mergedOutPath = 'coverage/lcov.info';\n const readOrEmpty = async (filePath: string) => {\n try {\n return await (await import('node:fs/promises')).readFile(filePath, 'utf8');\n } catch {\n return '';\n }\n };\n let vitestContent = '';\n let jestContent = '';\n try {\n vitestContent = await readOrEmpty(vitestLcovPath);\n } catch (readVitestError) {\n if (isDebug()) {\n console.info(`read vitest lcov failed: ${String(readVitestError)}`);\n }\n }\n try {\n jestContent = await readOrEmpty(jestLcovPath);\n } catch (readJestError) {\n if (isDebug()) {\n console.info(`read jest lcov failed: ${String(readJestError)}`);\n }\n }\n if (!vitestContent && !jestContent) {\n if (isDebug()) {\n console.info('No coverage outputs found to merge.');\n }\n return;\n }\n const merged = [vitestContent.trim(), jestContent.trim()].filter(Boolean).join('\\n');\n if (merged.length > 0) {\n await (await import('node:fs/promises')).mkdir('coverage', { recursive: true });\n await (await import('node:fs/promises')).writeFile(mergedOutPath, `${merged}\\n`, 'utf8');\n if (isDebug()) {\n console.info(`Merged coverage written to ${mergedOutPath}`);\n }\n } else if (isDebug()) {\n console.info('Coverage files existed but were empty; nothing to merge.');\n }\n};\n\nexport const emitMergedCoverage = async (\n ui: 'jest' | 'both',\n opts: {\n readonly selectionSpecified: boolean;\n readonly selectionPaths: readonly string[];\n readonly includeGlobs: readonly string[];\n readonly excludeGlobs: readonly string[];\n readonly workspaceRoot?: string;\n readonly editorCmd?: string;\n readonly coverageDetail?: number | 'all' | 'auto';\n readonly coverageShowCode?: boolean;\n readonly coverageMode?: 'compact' | 'full' | 'auto';\n readonly coverageMaxFiles?: number;\n readonly coverageMaxHotspots?: number;\n readonly coveragePageFit?: boolean;\n readonly executedTests?: readonly string[];\n },\n): Promise<void> => {\n const jestJson = path.join('coverage', 'jest', 'coverage-final.json');\n const jSize = fsSync.existsSync(jestJson) ? fsSync.statSync(jestJson).size : -1;\n const jestSizeLabel = jSize >= 0 ? `${jSize} bytes` : 'missing';\n if (isDebug()) {\n console.info(`Coverage JSON probe \u2192 jest: ${jestSizeLabel}`);\n }\n const jestData = await readCoverageJson(jestJson);\n const jestFilesCount = Object.keys(jestData).length;\n if (isDebug()) {\n console.info(`Decoded coverage entries \u2192 jest: ${jestFilesCount}`);\n }\n const map = createCoverageMap({});\n if (jestFilesCount > 0) {\n try {\n map.merge(jestData);\n } catch (mergeJestError) {\n console.warn(`Failed merging jest coverage JSON: ${String(mergeJestError)}`);\n }\n }\n if (map.files().length === 0) {\n if (isDebug()) {\n console.info('No JSON coverage to merge; skipping merged coverage print.');\n }\n return;\n }\n\n const repoRoot = opts.workspaceRoot ?? (await findRepoRoot());\n\n let filteredMap = filterCoverageMap(map, {\n includes: opts.includeGlobs,\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.warn(\n 'Coverage filters matched 0 files; retrying with include=**/* to avoid empty output.',\n );\n filteredMap = filterCoverageMap(map, {\n includes: ['**/*'],\n excludes: opts.excludeGlobs,\n root: repoRoot,\n selectionSpecified: Boolean(opts.selectionSpecified),\n });\n if (filteredMap.files().length === 0) {\n console.info('Coverage present but still no matches; skipping print.');\n return;\n }\n }\n\n let changedFilesOutput: readonly string[] = [];\n\n try {\n const out = await runText('git', ['diff', '--name-only', '--diff-filter=ACMRTUXB', 'HEAD'], {\n env: safeEnv(process.env, {}) as unknown as NodeJS.ProcessEnv,\n });\n changedFilesOutput = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((filePathText) => filePathText.replace(/\\\\/g, '/'));\n } catch (gitError) {\n console.warn(`git diff failed when deriving changed files: ${String(gitError)}`);\n }\n\n await printPerFileCompositeTables({\n map: filteredMap,\n root: repoRoot,\n pageFit: opts.coveragePageFit ?? Boolean(process.stdout.isTTY),\n ...(opts.coverageMaxHotspots !== undefined ? { maxHotspots: opts.coverageMaxHotspots } : {}),\n selectionPaths: opts.selectionPaths ?? [],\n changedFiles: changedFilesOutput,\n executedTests: opts.executedTests ?? [],\n });\n\n const context = LibReport.createContext({\n dir: path.resolve('coverage', 'merged'),\n coverageMap: filteredMap,\n defaultSummarizer: 'nested',\n });\n\n const reporters =\n ui === 'jest'\n ? [Reports.create('text', { file: 'coverage.txt' })]\n : [\n Reports.create('text', { file: 'coverage.txt' }),\n Reports.create('text-summary', { file: 'coverage-summary.txt' }),\n ];\n\n const colorizeIstanbulLine = (lineText: string): string => {\n const separator = /^[-=\\s]+$/;\n if (separator.test(lineText.trim())) {\n return lineText;\n }\n const headerLike = /\\bFile\\b\\s*\\|\\s*%\\s*Stmts\\b/.test(lineText);\n if (headerLike) {\n return lineText;\n }\n if (/^\\s*(Statements|Branches|Functions|Lines)\\s*:/.test(lineText)) {\n // Color the label, percentage, and the raw counts in parens, e.g. ( 822/1816 )\n const updated = lineText.replace(\n /(Statements|Branches|Functions|Lines)(\\s*:\\s*)(\\d+(?:\\.\\d+)?)(%)/,\n (_m, label, sep, num, pct) => {\n const colorize = tintPct(Number(num));\n return `${colorize(label)}${sep}${colorize(`${num}${pct}`)}`;\n },\n );\n return updated.replace(/\\(\\s*(\\d+)\\s*\\/\\s*(\\d+)\\s*\\)/, (_match, coveredText, totalText) => {\n const percent = (() => {\n const totalCount = Number(totalText);\n const coveredCount = Number(coveredText);\n return totalCount > 0 ? (coveredCount / totalCount) * 100 : 0;\n })();\n const colorize = tintPct(percent);\n return colorize(`( ${coveredText}/${totalText} )`);\n });\n }\n if (lineText.includes('|')) {\n const parts = lineText.split('|');\n if (parts.length >= 2) {\n // Compute row weight from numeric percent columns\n const numericValues: number[] = [];\n for (let index = 1; index < parts.length - 1; index += 1) {\n const value = Number((parts[index] ?? '').trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n numericValues.push(value);\n }\n }\n const rowWeight = numericValues.length ? Math.min(...numericValues) : undefined;\n // Tint each numeric % column\n for (let index = 1; index < parts.length - 1; index += 1) {\n const raw = parts[index] ?? '';\n const value = Number(raw.trim());\n if (!Number.isNaN(value) && value >= 0 && value <= 100) {\n parts[index] = tintPct(value)(raw);\n }\n }\n // Tint the File/Group label and Uncovered column based on row weight\n if (rowWeight !== undefined) {\n parts[0] = tintPct(rowWeight)(parts[0] ?? '');\n const lastIndex = parts.length - 1;\n if (lastIndex >= 1) {\n parts[lastIndex] = tintPct(rowWeight)(parts[lastIndex] ?? '');\n }\n }\n return parts.join('|');\n }\n }\n return lineText;\n };\n for (const reporter of reporters) {\n reporter.execute(context);\n }\n const textPath = path.resolve('coverage', 'merged', 'coverage.txt');\n const summaryPath = path.resolve('coverage', 'merged', 'coverage-summary.txt');\n const filesToPrint: string[] = [];\n if (fsSync.existsSync(textPath)) {\n filesToPrint.push(textPath);\n }\n if (fsSync.existsSync(summaryPath)) {\n filesToPrint.push(summaryPath);\n }\n if (filesToPrint.length > 0) {\n for (const filePath of filesToPrint) {\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n const colored = raw.split(/\\r?\\n/).map(colorizeIstanbulLine).join('\\n');\n process.stdout.write(colored.endsWith('\\n') ? colored : `${colored}\\n`);\n } catch {\n // fall back to raw printing\n try {\n const raw = fsSync.readFileSync(filePath, 'utf8');\n process.stdout.write(raw.endsWith('\\n') ? raw : `${raw}\\n`);\n } catch {\n /* ignore */\n }\n }\n }\n } else {\n // Fallback: no files created by reporter; run standard reporters to stdout (uncolored)\n const stdoutReporters =\n ui === 'jest'\n ? [Reports.create('text')]\n : [Reports.create('text'), Reports.create('text-summary')];\n for (const reporter of stdoutReporters) {\n reporter.execute(context);\n }\n }\n\n // Optional deep-dive per-file coverage: only when explicitly requested (not on 'auto')\n const modeResolved: 'compact' | 'full' =\n opts.coverageMode && opts.coverageMode !== 'auto' ? opts.coverageMode : 'full';\n const shouldDeepDive = opts.coverageDetail !== undefined && opts.coverageDetail !== 'auto';\n if (shouldDeepDive) {\n if (modeResolved === 'compact') {\n await printCompactCoverage({\n map: filteredMap,\n root: repoRoot,\n ...(opts.coverageMaxFiles !== undefined ? { maxFiles: opts.coverageMaxFiles } : {}),\n ...(opts.coverageMaxHotspots !== undefined\n ? { maxHotspots: opts.coverageMaxHotspots }\n : {}),\n ...(opts.coveragePageFit !== undefined ? { pageFit: opts.coveragePageFit } : {}),\n });\n } else {\n const limit = opts.coverageDetail === 'all' ? 'all' : (opts.coverageDetail as number);\n await printDetailedCoverage({\n map: filteredMap,\n root: repoRoot,\n limitPerFile: limit,\n showCode: opts.coverageShowCode ?? Boolean(process.stdout.isTTY),\n });\n }\n }\n};\n\nexport const runJestBootstrap = async (): Promise<void> => {\n const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const code = await runExitCode(npmCmd, ['run', '-s', 'test:jest:bootstrap'], {\n env: safeEnv(process.env, {\n NODE_ENV: 'test',\n }) as unknown as NodeJS.ProcessEnv,\n });\n if (Number(code) !== 0) {\n throw new Error('Jest DB bootstrap failed');\n }\n};\n\nexport const program = async (): Promise<void> => {\n registerSignalHandlersOnce();\n const argv = process.argv.slice(2);\n const {\n jestArgs,\n collectCoverage,\n coverageUi,\n coverageAbortOnFailure,\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n editorCmd,\n workspaceRoot,\n coverageDetail,\n coverageShowCode,\n coverageMode,\n coverageMaxFiles: coverageMaxFilesArg,\n coverageMaxHotspots: coverageMaxHotspotsArg,\n coveragePageFit,\n } = deriveArgs(argv);\n console.info(`Selection \u2192 specified=${selectionSpecified} paths=${selectionPaths.length}`);\n const { jest } = argsForDiscovery(['run'], jestArgs);\n const selectionLooksLikeTest = selectionPaths.some(\n (pathText) => /\\.(test|spec)\\.[tj]sx?$/i.test(pathText) || /(^|\\/)tests?\\//i.test(pathText),\n );\n const selectionLooksLikePath = selectionPaths.some(\n (pathText) => /[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText),\n );\n const selectionHasPaths = selectionPaths.length > 0;\n const repoRootForDiscovery = workspaceRoot ?? (await findRepoRoot());\n\n // Expand production selections from bare filenames or repo-root-relative suffixes\n const expandProductionSelections = async (\n tokens: readonly string[],\n repoRoot: string,\n ): Promise<readonly string[]> => {\n const results = new Set<string>();\n for (const raw of tokens) {\n const token = String(raw).trim();\n if (!token) {\n continue;\n }\n const isAbs = path.isAbsolute(token);\n const looksLikeRelPath = /[\\\\/]/.test(token);\n let candidateFromRoot: string | undefined;\n if (token.startsWith('/')) {\n candidateFromRoot = path.join(repoRoot, token.slice(1));\n } else if (looksLikeRelPath) {\n candidateFromRoot = path.join(repoRoot, token);\n } else {\n candidateFromRoot = undefined;\n }\n const tryPushIfProd = (absPath: string) => {\n const norm = path.resolve(absPath).replace(/\\\\/g, '/');\n const isTest = /(^|\\/)tests?\\//i.test(norm) || /\\.(test|spec)\\.[tj]sx?$/i.test(norm);\n if (!isTest && fsSync.existsSync(norm)) {\n results.add(norm);\n }\n };\n if (isAbs && fsSync.existsSync(token)) {\n tryPushIfProd(token);\n continue;\n }\n if (candidateFromRoot && fsSync.existsSync(candidateFromRoot)) {\n tryPushIfProd(candidateFromRoot);\n continue;\n }\n // Use ripgrep to find files whose path ends with the token (filename or suffix)\n try {\n // eslint-disable-next-line no-await-in-loop\n const out = await runText('rg', ['--files', '-g', `**/${token}`], {\n cwd: repoRoot,\n env: safeEnv(process.env, {\n CI: '1',\n }) as unknown as NodeJS.ProcessEnv,\n timeoutMs: 4000,\n });\n const matches = out\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((rel) => path.resolve(repoRoot, rel).replace(/\\\\/g, '/'))\n .filter(\n (abs) =>\n !abs.includes('/node_modules/') &&\n !abs.includes('/coverage/') &&\n !/(^|\\/)tests?\\//i.test(abs) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(abs),\n );\n matches.forEach((abs) => results.add(abs));\n } catch {\n // ignore\n }\n }\n return Array.from(results);\n };\n\n const initialProdSelections = selectionPaths.filter(\n (pathText) =>\n (/[\\\\/]/.test(pathText) || /\\.(m?[tj]sx?)$/i.test(pathText)) &&\n !/(^|\\/)tests?\\//i.test(pathText) &&\n !/\\.(test|spec)\\.[tj]sx?$/i.test(pathText),\n );\n const expandedProdSelections = initialProdSelections.length\n ? initialProdSelections\n : await expandProductionSelections(selectionPaths, repoRootForDiscovery);\n const selectionIncludesProdPaths = expandedProdSelections.length > 0;\n console.info(\n `Selection classify \u2192 looksLikePath=${selectionLooksLikePath} looksLikeTest=${selectionLooksLikeTest} prodPaths=${selectionIncludesProdPaths}`,\n );\n const stripPathTokens = (args: readonly string[]) =>\n args.filter((token) => !selectionPaths.includes(token));\n const jestDiscoveryArgs = selectionIncludesProdPaths ? stripPathTokens(jest) : jest;\n\n const projectConfigs: string[] = [];\n try {\n const baseCfg = path.resolve('jest.config.js');\n const tsCfg = path.resolve('jest.ts.config.js');\n if (fsSync.existsSync(baseCfg)) {\n projectConfigs.push(baseCfg);\n }\n if (fsSync.existsSync(tsCfg)) {\n projectConfigs.push(tsCfg);\n }\n } catch (err) {\n console.warn(`Failed to discover Jest project configs: ${String(err)}`);\n }\n\n const perProjectFiles = new Map<string, string[]>();\n if (selectionIncludesProdPaths) {\n console.info(\n `Discovering (rg-first) \u2192 related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`,\n );\n const prodSelections = expandedProdSelections;\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const allTests = await discoverJestResilient([...jestDiscoveryArgs, '--config', cfg], {\n cwd: cfgCwd,\n });\n let directPerProject: readonly string[] = [];\n try {\n // eslint-disable-next-line no-await-in-loop\n directPerProject = await selectDirectTestsForProduction({\n rootDir: repoRootForDiscovery,\n testFiles: allTests,\n productionFiles: prodSelections,\n });\n } catch (err) {\n if (isDebug()) {\n console.warn(`direct selection failed for project ${path.basename(cfg)}: ${String(err)}`);\n }\n }\n perProjectFiles.set(cfg, directPerProject as string[]);\n }\n } else {\n console.info(\n `Discovering \u2192 jestArgs=${jestDiscoveryArgs.join(\n ' ',\n )} | related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`,\n );\n for (const cfg of projectConfigs) {\n const cfgCwd = path.dirname(cfg);\n // eslint-disable-next-line no-await-in-loop\n const files = await discoverJestResilient([...jestDiscoveryArgs, '--config', cfg], {\n cwd: cfgCwd,\n });\n perProjectFiles.set(cfg, files as string[]);\n }\n }\n\n const perProjectFiltered = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n const files = perProjectFiles.get(cfg) ?? [];\n const selectionTestPaths = selectionPaths.filter(\n (pathToken) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(pathToken) || /(^|\\/)tests?\\//i.test(pathToken),\n );\n const candidates = selectionHasPaths && selectionLooksLikeTest ? selectionTestPaths : files;\n const absFiles = candidates\n .map((candidatePath) =>\n path.isAbsolute(candidatePath)\n ? candidatePath\n : path.join(repoRootForDiscovery, candidatePath),\n )\n .map((absolutePath) => absolutePath.replace(/\\\\/g, '/'));\n // eslint-disable-next-line no-await-in-loop\n const onlyOwned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n absFiles,\n path.dirname(cfg),\n );\n perProjectFiltered.set(cfg, onlyOwned as string[]);\n }\n\n let jestFiles = Array.from(perProjectFiltered.values()).flat();\n console.info(`Discovery results \u2192 jest=${jestFiles.length} (projects=${projectConfigs.length})`);\n\n const looksLikeTestPath = (candidatePath: string) =>\n /\\.(test|spec)\\.[tj]sx?$/i.test(candidatePath) || /(^|\\/)tests?\\//i.test(candidatePath);\n const prodSelections = expandedProdSelections;\n\n let effectiveJestFiles = jestFiles.slice();\n if (selectionHasPaths && prodSelections.length > 0) {\n console.info(`rg related \u2192 prodSelections=${prodSelections.length} (starting)`);\n const repoRootForRefinement = workspaceRoot ?? (await findRepoRoot());\n const selectionKey = prodSelections\n .map((absPath) => path.relative(repoRootForRefinement, absPath).replace(/\\\\/g, '/'))\n .sort((a, b) => a.localeCompare(b))\n .join('|');\n const { cachedRelated, findRelatedTestsFast, DEFAULT_TEST_GLOBS } = await import(\n './fast-related'\n );\n const { DEFAULT_EXCLUDE } = await import('./args');\n const rgMatches = await cachedRelated({\n repoRoot: repoRootForRefinement,\n selectionKey,\n compute: () =>\n findRelatedTestsFast({\n repoRoot: repoRootForRefinement,\n productionPaths: prodSelections,\n testGlobs: DEFAULT_TEST_GLOBS,\n excludeGlobs: DEFAULT_EXCLUDE,\n timeoutMs: 1500,\n }),\n });\n console.info(`rg candidates \u2192 count=${rgMatches.length}`);\n console.info('rg candidates \u2192');\n const normalizedCandidates = rgMatches.map((candidatePath) =>\n candidatePath.replace(/\\\\/g, '/'),\n );\n normalizedCandidates.forEach((candidatePath) => console.info(` - ${candidatePath}`));\n const rgSet = new Set(rgMatches.map((candidate) => candidate.replace(/\\\\/g, '/')));\n if (rgSet.size > 0) {\n if (selectionIncludesProdPaths) {\n // Overwrite jestFiles with rg candidates and re-filter per project ownership\n const rgCandidates = Array.from(rgSet);\n const perProjectFromRg = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n rgCandidates,\n path.dirname(cfg),\n );\n perProjectFromRg.set(cfg, owned as string[]);\n }\n // If ownership filtering lost all candidates,\n // run a content-based import scan on rg candidates to keep only relevant tests\n let totalOwned = Array.from(perProjectFromRg.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg2, owned] of perProjectFromRg.entries()) {\n perProjectFiltered.set(cfg2, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n } else {\n const repoRootForScan = repoRootForDiscovery;\n const toSeeds = (abs: string) => {\n const rel = path.relative(repoRootForScan, abs).replace(/\\\\/g, '/');\n const withoutExt = rel.replace(/\\.(m?[tj]sx?)$/i, '');\n const base = path.basename(withoutExt);\n const segs = withoutExt.split('/');\n const tail2 = segs.slice(-2).join('/');\n return Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));\n };\n const seeds = Array.from(new Set(prodSelections.flatMap(toSeeds)));\n const includesSeed = (text: string) => seeds.some((seed) => text.includes(seed));\n const tryRead = (filePath: string): string => {\n try {\n return fsSync.readFileSync(filePath, 'utf8');\n } catch {\n return '';\n }\n };\n const resolveLocalImport = (fromFile: string, spec: string): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const cand = path.resolve(baseDir, spec);\n const exts = ['', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];\n for (const ext of exts) {\n const full = ext ? `${cand}${ext}` : cand;\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n // index files\n for (const ext of exts) {\n const full = path.join(cand, `index${ext}`);\n if (fsSync.existsSync(full)) {\n return full;\n }\n }\n return undefined;\n };\n const importSpecs = (body: string): string[] => {\n const out: string[] = [];\n const importRe = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRe = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n let importMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((importMatch = importRe.exec(body))) {\n out.push(importMatch[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n let requireMatch: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((requireMatch = requireRe.exec(body))) {\n out.push(requireMatch[1]!);\n }\n return out;\n };\n const keptCandidates: string[] = [];\n for (const cand of rgCandidates) {\n const body = tryRead(cand);\n if (includesSeed(body)) {\n keptCandidates.push(cand);\n continue;\n }\n const specs = importSpecs(body).filter(\n (sp) => sp.startsWith('.') || sp.startsWith('/'),\n );\n let kept = false;\n for (const spec of specs) {\n const target = resolveLocalImport(cand, spec);\n if (!target) {\n continue;\n }\n const tb = tryRead(target);\n if (includesSeed(tb)) {\n kept = true;\n break;\n }\n }\n if (kept) {\n keptCandidates.push(cand);\n }\n }\n if (keptCandidates.length > 0) {\n const perProjectFromScan = new Map<string, string[]>();\n for (const cfg of projectConfigs) {\n // eslint-disable-next-line no-await-in-loop\n const owned = await filterCandidatesForProject(\n cfg,\n jestDiscoveryArgs,\n keptCandidates,\n path.dirname(cfg),\n );\n perProjectFromScan.set(cfg, owned as string[]);\n }\n totalOwned = Array.from(perProjectFromScan.values()).flat().length;\n if (totalOwned > 0) {\n perProjectFiltered.clear();\n for (const [cfg, owned] of perProjectFromScan.entries()) {\n perProjectFiltered.set(cfg, owned);\n }\n jestFiles = Array.from(perProjectFiltered.values()).flat();\n effectiveJestFiles = jestFiles.slice();\n }\n }\n }\n // If still zero after scan, leave as zero to trigger jest-list fallback later\n // and do NOT assign all candidates to an arbitrary project.\n } else {\n const narrowedJest = effectiveJestFiles.filter((candidate) =>\n rgSet.has(candidate.replace(/\\\\/g, '/')),\n );\n if (narrowedJest.length > 0) {\n effectiveJestFiles = narrowedJest;\n }\n }\n }\n if (effectiveJestFiles.length === 0) {\n const repoRoot = repoRootForRefinement;\n const seeds = prodSelections\n .map((abs) =>\n path\n .relative(repoRoot, abs)\n .replace(/\\\\/g, '/')\n .replace(/\\.(m?[tj]sx?)$/i, ''),\n )\n .flatMap((rel) => {\n const base = path.basename(rel);\n const segments = rel.split('/');\n return Array.from(new Set([rel, base, segments.slice(-2).join('/')].filter(Boolean)));\n });\n\n const includesSeed = (text: string) => seeds.some((seed) => text.includes(seed));\n const tryReadFile = async (absPath: string): Promise<string> => {\n try {\n return await fs.readFile(absPath, 'utf8');\n } catch {\n return '';\n }\n };\n const resolveLocalImport = (fromFile: string, spec: string): string | undefined => {\n const baseDir = path.dirname(fromFile);\n const candidate = path.resolve(baseDir, spec);\n const extensions = ['', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'];\n for (const ext of extensions) {\n const fullPath = ext ? `${candidate}${ext}` : candidate;\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n for (const ext of extensions) {\n const fullPath = path.join(candidate, `index${ext}`);\n if (fsSync.existsSync(fullPath)) {\n return fullPath;\n }\n }\n return undefined;\n };\n const importOrExportSpecs = (body: string): string[] => {\n const results: string[] = [];\n const importRegex = /import\\s+[^'\"\\n]*from\\s+['\"]([^'\"]+)['\"];?/g;\n const requireRegex = /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n const exportFromRegex = /export\\s+(?:\\*|\\{[^}]*\\})\\s*from\\s*['\"]([^'\"]+)['\"];?/g;\n let match: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while ((match = importRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = requireRegex.exec(body))) {\n results.push(match[1]!);\n }\n // eslint-disable-next-line no-cond-assign\n while ((match = exportFromRegex.exec(body))) {\n results.push(match[1]!);\n }\n return results;\n };\n\n const union = Array.from(new Set<string>(jestFiles));\n const keep = new Set<string>();\n const visitedBodyCache = new Map<string, string>();\n const specCache = new Map<string, readonly string[]>();\n const resolutionCache = new Map<string, string | undefined>();\n\n const getBody = async (absPath: string): Promise<string> => {\n const existing = visitedBodyCache.get(absPath);\n if (existing !== undefined) {\n return existing;\n }\n const content = await tryReadFile(absPath);\n visitedBodyCache.set(absPath, content);\n return content;\n };\n\n const getSpecs = async (absPath: string): Promise<readonly string[]> => {\n const cached = specCache.get(absPath);\n if (cached !== undefined) {\n return cached;\n }\n const body = await getBody(absPath);\n const specs = importOrExportSpecs(body);\n specCache.set(absPath, specs);\n return specs;\n };\n\n const resolveSpec = (fromFile: string, spec: string): string | undefined => {\n const key = `${fromFile}|${spec}`;\n if (resolutionCache.has(key)) {\n return resolutionCache.get(key);\n }\n const resolved =\n spec.startsWith('.') || spec.startsWith('/')\n ? resolveLocalImport(fromFile, spec)\n : undefined;\n resolutionCache.set(key, resolved);\n return resolved;\n };\n\n const MAX_DEPTH = 5;\n const seen = new Set<string>();\n const matchesTransitively = async (absTestPath: string, depth: number): Promise<boolean> => {\n if (depth > MAX_DEPTH) {\n return false;\n }\n const cacheKey = `${absTestPath}@${depth}`;\n if (seen.has(cacheKey)) {\n return false;\n }\n seen.add(cacheKey);\n const body = await getBody(absTestPath);\n if (includesSeed(body)) {\n return true;\n }\n const specs = await getSpecs(absTestPath);\n for (const spec of specs) {\n const target = resolveSpec(absTestPath, spec);\n if (!target) {\n continue;\n }\n // eslint-disable-next-line no-await-in-loop\n const targetBody = await getBody(target);\n if (includesSeed(targetBody)) {\n return true;\n }\n // eslint-disable-next-line no-await-in-loop\n if (await matchesTransitively(target, depth + 1)) {\n return true;\n }\n }\n return false;\n };\n\n const concurrency = 16;\n let scanIndex = 0;\n const workers: Promise<void>[] = [];\n for (let workerIndex = 0; workerIndex < concurrency; workerIndex += 1) {\n workers.push(\n // eslint-disable-next-line no-loop-func\n (async () => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentIndex = scanIndex;\n if (currentIndex >= union.length) {\n break;\n }\n scanIndex += 1;\n const candidate = union[currentIndex]!;\n // eslint-disable-next-line no-await-in-loop\n const ok = await matchesTransitively(candidate, 0);\n if (ok) {\n keep.add(candidate);\n }\n }\n })(),\n );\n }\n await Promise.all(workers);\n\n const jestKept = jestFiles\n .filter((candidate) => keep.has(candidate))\n .sort((left, right) => left.localeCompare(right));\n if (jestKept.length) {\n effectiveJestFiles = jestKept;\n }\n console.info(`fallback refine (transitive) \u2192 jest=${effectiveJestFiles.length}`);\n }\n }\n\n const jestDecision = decideShouldRunJest([], effectiveJestFiles, {\n selectionSpecified,\n selectionPaths,\n });\n const { shouldRunJest } = jestDecision;\n const jestCount = effectiveJestFiles.length;\n const sharePct = Math.round(jestDecision.share * 100);\n const msg = shouldRunJest\n ? `Jest selected (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`\n : `Skipping Jest (${sharePct}% of discovered tests; reason: ${jestDecision.reason})`;\n console.info(`Discovery \u2192 jest: ${jestCount}. ${msg}`);\n\n if (!shouldRunJest) {\n console.warn('No matching tests were discovered for either Vitest or Jest.');\n console.info(`Jest args: ${[...jestDiscoveryArgs, '--listTests'].join(' ')}`);\n console.info(\n 'Tip: check your -t/--testNamePattern and file path; Jest lists files selected by your patterns.',\n );\n process.exit(1);\n return;\n }\n\n console.info(`Run plan \u2192 Jest maybe=${shouldRunJest} (projects=${projectConfigs.length})`);\n let jestExitCode = 0;\n const executedTestFilesSet = new Set<string>();\n if (shouldRunJest) {\n console.info('Starting Jest (no Vitest targets)\u2026');\n await runJestBootstrap();\n const jestRunArgs = selectionIncludesProdPaths ? stripPathTokens(jestArgs) : jestArgs;\n const projectsToRun = projectConfigs.filter(\n (cfg) => (perProjectFiltered.get(cfg) ?? []).length > 0,\n );\n const totalProjectsToRun = projectsToRun.length;\n const stripFooter = (text: string): string => {\n const lines = text.split('\\n');\n const idx = lines.findIndex((ln) => /^Test Files\\s/.test(stripAnsiSimple(ln)));\n return idx >= 0 ? lines.slice(0, idx).join('\\n').trimEnd() : text;\n };\n for (let projIndex = 0; projIndex < projectsToRun.length; projIndex += 1) {\n const cfg = projectsToRun[projIndex]!;\n const isLastProject = projIndex === totalProjectsToRun - 1;\n const files = perProjectFiltered.get(cfg) ?? [];\n if (files.length === 0) {\n console.info(`Project ${path.basename(cfg)}: 0 matching tests after filter; skipping.`);\n // eslint-disable-next-line no-continue\n continue;\n }\n files.forEach((absTestPath) =>\n executedTestFilesSet.add(path.resolve(absTestPath).replace(/\\\\/g, '/')),\n );\n const outJson = path.join(\n os.tmpdir(),\n `jest-bridge-${Date.now()}-${Math.random().toString(36).slice(2)}.json`,\n );\n const reporterPath = path.resolve('scripts/jest-vitest-bridge.cjs');\n try {\n if (!fsSync.existsSync(reporterPath)) {\n fsSync.mkdirSync(path.dirname(reporterPath), { recursive: true });\n fsSync.writeFileSync(reporterPath, JEST_BRIDGE_REPORTER_SOURCE, 'utf8');\n }\n } catch (ensureReporterError) {\n console.warn(`Unable to ensure jest bridge reporter: ${String(ensureReporterError)}`);\n }\n // eslint-disable-next-line no-await-in-loop\n // Ensure any explicitly selected paths (tests or production files) are included in coverage\n const selectedFilesForCoverage = selectionPaths\n .filter((pathToken) => /[\\\\/]/.test(pathToken))\n // Avoid restricting coverage to test files when a test path is selected\n .filter((pathToken) => !looksLikeTestPath(pathToken))\n .map((pathToken) => path.relative(repoRootForDiscovery, pathToken).replace(/\\\\\\\\/g, '/'))\n .filter((rel) => rel && !/^\\.+\\//.test(rel))\n .map((rel) => (rel.startsWith('./') ? rel : `./${rel}`));\n const coverageFromArgs: string[] = [];\n for (const relPath of selectedFilesForCoverage) {\n coverageFromArgs.push('--collectCoverageFrom', relPath);\n }\n\n // eslint-disable-next-line no-await-in-loop\n const { code, output } = await runWithCapture(\n babelNodeBin,\n [\n '--extensions',\n '.js,.ts',\n jestBin,\n '--config',\n cfg,\n '--runTestsByPath',\n '--reporters',\n reporterPath,\n '--silent',\n '--colors',\n '--json',\n '--outputFile',\n outJson,\n ...jestRunArgs,\n ...coverageFromArgs,\n '--passWithNoTests',\n ...files,\n ],\n {\n env: safeEnv(process.env, {\n NODE_ENV: 'test',\n JEST_BRIDGE_OUT: outJson,\n FORCE_COLOR: '3',\n TERM: process.env.TERM || 'xterm-256color',\n }) as unknown as NodeJS.ProcessEnv,\n },\n );\n let pretty = '';\n try {\n const debug = isDebug();\n if (debug) {\n const capturedLen = output.length;\n console.info(`jest captured output length=${capturedLen}`);\n const fileSizeBytes = fsSync.existsSync(outJson) ? fsSync.statSync(outJson).size : -1;\n console.info(`bridge json @ ${outJson} size=${fileSizeBytes}`);\n }\n const jsonText = fsSync.readFileSync(outJson, 'utf8');\n const parsed = JSON.parse(jsonText) as unknown;\n const bridge = coerceJestJsonToBridge(parsed);\n pretty = renderVitestFromJestJSON(bridge, {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n });\n if (debug) {\n const preview = pretty.split('\\n').slice(0, 3).join('\\n');\n console.info(`pretty preview (json):\\n${preview}${pretty.includes('\\n') ? '\\n\u2026' : ''}`);\n }\n } catch (jsonErr) {\n const debug = isDebug();\n if (debug) {\n console.info('renderer: fallback to text prettifier (missing/invalid JSON)');\n console.info(String(jsonErr));\n console.info(`fallback: raw output lines=${output.split(/\\r?\\n/).length}`);\n }\n const renderOpts = {\n cwd: repoRootForDiscovery,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n } as const;\n pretty = formatJestOutputVitest(output, renderOpts);\n if (debug) {\n const preview = pretty.split('\\n').slice(0, 3).join('\\n');\n console.info(`pretty preview (text):\\n${preview}${pretty.includes('\\n') ? '\\n\u2026' : ''}`);\n }\n }\n if (!isLastProject) {\n pretty = stripFooter(pretty);\n }\n if (pretty.trim().length > 0) {\n process.stdout.write(pretty.endsWith('\\n') ? pretty : `${pretty}\\n`);\n }\n if (Number(code) !== 0) {\n jestExitCode = code;\n }\n }\n } else {\n console.info('Jest run skipped based on selection and thresholds.');\n }\n\n // If abort-on-failure is requested for coverage, exit immediately after tests when failing\n if (collectCoverage && shouldRunJest && coverageAbortOnFailure && jestExitCode !== 0) {\n process.exit(jestExitCode);\n }\n\n if (collectCoverage && shouldRunJest) {\n await mergeLcov();\n const repoRoot = workspaceRoot ?? (await findRepoRoot());\n const mergedOptsBase = {\n selectionSpecified,\n selectionPaths,\n includeGlobs,\n excludeGlobs,\n workspaceRoot: repoRoot,\n ...(editorCmd !== undefined ? { editorCmd } : {}),\n ...(coverageDetail !== undefined ? { coverageDetail } : {}),\n ...(coverageShowCode !== undefined ? { coverageShowCode } : {}),\n coverageMode,\n ...(coverageMaxFilesArg !== undefined ? { coverageMaxFiles: coverageMaxFilesArg } : {}),\n ...(coverageMaxHotspotsArg !== undefined\n ? { coverageMaxHotspots: coverageMaxHotspotsArg }\n : {}),\n coveragePageFit,\n executedTests: Array.from(executedTestFilesSet),\n } as const;\n await emitMergedCoverage(coverageUi, mergedOptsBase);\n }\n\n const finalExitCode = jestExitCode;\n process.exit(finalExitCode);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["path", "env", "resolve", "resolve", "path", "uniq", "path", "path", "opts", "value", "rest", "create", "source", "path", "picomatch", "state", "require_picomatch", "require_parse", "util", "key", "token", "c", "buffer", "util", "value", "JSON5", "path", "fs", "path", "path", "stat", "babelNodeBin", "jestBin", "fs", "picomatch", "path", "fsSync", "ext", "stem", "hideMiddle", "label", "headRaw", "tailRaw", "extractImportSpecs", "path", "fs", "JSON5", "path", "os", "fsSync", "createCoverageMap", "fs", "createCoverageMap", "prodSelections", "cachedRelated", "findRelatedTestsFast", "DEFAULT_TEST_GLOBS", "DEFAULT_EXCLUDE"]
7
7
  }