From 42406a3b4dac510783a1b5d5345c11eac22bb5ba Mon Sep 17 00:00:00 2001 From: Michael Arnaldi Date: Sun, 20 Mar 2022 14:28:18 +0100 Subject: [PATCH] fix: render original source if mapped in node (#987) --- packages/vitest/src/node/error.ts | 13 ++++++++++--- packages/vitest/src/types/general.ts | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/vitest/src/node/error.ts b/packages/vitest/src/node/error.ts index cc3daa6d1d70..e8df9d1cfa36 100644 --- a/packages/vitest/src/node/error.ts +++ b/packages/vitest/src/node/error.ts @@ -1,7 +1,7 @@ /* eslint-disable prefer-template */ /* eslint-disable no-template-curly-in-string */ import { existsSync, promises as fs } from 'fs' -import { relative } from 'pathe' +import { join, relative } from 'pathe' import c from 'picocolors' import cliTruncate from 'cli-truncate' import type { ErrorWithDiff, ParsedStack, Position } from '../types' @@ -10,6 +10,12 @@ import { F_POINTER } from '../utils/figures' import type { Vitest } from './core' import { unifiedDiff } from './diff' +export function fileFromParsedStack(stack: ParsedStack) { + if (stack?.sourcePos?.source?.startsWith('..')) + return join(stack.file, '../', stack.sourcePos.source) + return stack.file +} + export async function printError(error: unknown, ctx: Vitest) { let e = error as ErrorWithDiff @@ -32,7 +38,7 @@ export async function printError(error: unknown, ctx: Vitest) { printErrorMessage(e, ctx.console) await printStack(ctx, stacks, nearest, async(s, pos) => { if (s === nearest && nearest) { - const sourceCode = await fs.readFile(nearest.file, 'utf-8') + const sourceCode = await fs.readFile(fileFromParsedStack(nearest), 'utf-8') ctx.log(c.yellow(generateCodeFrame(sourceCode, 4, pos))) } }) @@ -100,7 +106,8 @@ async function printStack( for (const frame of stack) { const pos = frame.sourcePos || frame const color = frame === highlight ? c.yellow : c.gray - const path = relative(ctx.config.root, frame.file) + const file = fileFromParsedStack(frame) + const path = relative(ctx.config.root, file) ctx.log(color(` ${c.dim(F_POINTER)} ${[frame.method, c.dim(`${path}:${pos.line}:${pos.column}`)].filter(Boolean).join(' ')}`)) await onStack?.(frame, pos) diff --git a/packages/vitest/src/types/general.ts b/packages/vitest/src/types/general.ts index 44a5bf3198a2..08f65bf7481c 100644 --- a/packages/vitest/src/types/general.ts +++ b/packages/vitest/src/types/general.ts @@ -47,6 +47,7 @@ export interface UserConsoleLog { } export interface Position { + source?: string line: number column: number }