From 159c129e478eed1f21f1947903dfde8bc5ffc90e Mon Sep 17 00:00:00 2001 From: Tomer Ohana Date: Thu, 18 May 2023 16:56:54 +0100 Subject: [PATCH] calculate ssr stacktrace offset lazily --- packages/vite/src/node/ssr/ssrStacktrace.ts | 24 ++++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/vite/src/node/ssr/ssrStacktrace.ts b/packages/vite/src/node/ssr/ssrStacktrace.ts index fe66b8803530b7..9cb2545263b2c3 100644 --- a/packages/vite/src/node/ssr/ssrStacktrace.ts +++ b/packages/vite/src/node/ssr/ssrStacktrace.ts @@ -2,20 +2,28 @@ import { TraceMap, originalPositionFor } from '@jridgewell/trace-mapping' import type { ModuleGraph } from '../server/moduleGraph' let offset: number -try { - new Function('throw new Error(1)')() -} catch (e) { - // in Node 12, stack traces account for the function wrapper. - // in Node 13 and later, the function wrapper adds two lines, - // which must be subtracted to generate a valid mapping - const match = /:(\d+):\d+\)$/.exec(e.stack.split('\n')[1]) - offset = match ? +match[1] - 1 : 0 + +function calculateOffsetOnce() { + if (offset !== undefined) { + return + } + + try { + new Function('throw new Error(1)')() + } catch (e) { + // in Node 12, stack traces account for the function wrapper. + // in Node 13 and later, the function wrapper adds two lines, + // which must be subtracted to generate a valid mapping + const match = /:(\d+):\d+\)$/.exec(e.stack.split('\n')[1]) + offset = match ? +match[1] - 1 : 0 + } } export function ssrRewriteStacktrace( stack: string, moduleGraph: ModuleGraph, ): string { + calculateOffsetOnce() return stack .split('\n') .map((line) => {