From 1d4130d44ec62fe30578754e504a6a7088724158 Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Wed, 14 Jul 2021 22:02:42 +0700 Subject: [PATCH 1/2] fix: don't rewrite error stacktrace if it's not writable --- packages/vite/src/node/server/index.ts | 16 +++++++++++++++- packages/vite/src/node/ssr/ssrModuleLoader.ts | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 1f06627505a54d..e5db0c1ce15a14 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -366,7 +366,21 @@ export async function createServer( }, ssrFixStacktrace(e) { if (e.stack) { - e.stack = ssrRewriteStacktrace(e.stack, moduleGraph) + const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) + const { configurable, writable } = Object.getOwnPropertyDescriptor( + e, + 'stack' + )! + if (configurable) { + Object.defineProperty(e, 'stack', { + value: stacktrace, + enumerable: true, + configurable: true, + writable: true + }) + } else if (writable) { + e.stack = stacktrace + } } }, listen(port?: number, isRestart?: boolean) { diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index 3ee706740f3c60..1eaaa1ac0a9078 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -141,9 +141,23 @@ async function instantiateModule( ssrExportAll ) } catch (e) { - e.stack = ssrRewriteStacktrace(e.stack, moduleGraph) + const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) + const { configurable, writable } = Object.getOwnPropertyDescriptor( + e, + 'stack' + )! + if (configurable) { + Object.defineProperty(e, 'stack', { + value: stacktrace, + enumerable: true, + configurable: true, + writable: true + }) + } else if (writable) { + e.stack = stacktrace + } server.config.logger.error( - `Error when evaluating SSR module ${url}:\n${e.stack}`, + `Error when evaluating SSR module ${url}:\n${stacktrace}`, { timestamp: true, clear: server.config.clearScreen From 016d3282f4cb8e23e320bb5636997cc7b92b2dfd Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Wed, 14 Jul 2021 22:40:00 +0700 Subject: [PATCH 2/2] chore: extract rebindErrorStacktrace function --- packages/vite/src/node/server/index.ts | 20 +++++-------------- packages/vite/src/node/ssr/ssrModuleLoader.ts | 17 ++-------------- packages/vite/src/node/ssr/ssrStacktrace.ts | 17 ++++++++++++++++ 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index e5db0c1ce15a14..5f7ab12765a169 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -48,7 +48,10 @@ import { TransformOptions as EsbuildTransformOptions } from 'esbuild' import { DepOptimizationMetadata, optimizeDeps } from '../optimizer' import { ssrLoadModule } from '../ssr/ssrModuleLoader' import { resolveSSRExternal } from '../ssr/ssrExternal' -import { ssrRewriteStacktrace } from '../ssr/ssrStacktrace' +import { + rebindErrorStacktrace, + ssrRewriteStacktrace +} from '../ssr/ssrStacktrace' import { createMissingImporterRegisterFn } from '../optimizer/registerMissing' import { printServerUrls } from '../logger' import { resolveHostname } from '../utils' @@ -367,20 +370,7 @@ export async function createServer( ssrFixStacktrace(e) { if (e.stack) { const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) - const { configurable, writable } = Object.getOwnPropertyDescriptor( - e, - 'stack' - )! - if (configurable) { - Object.defineProperty(e, 'stack', { - value: stacktrace, - enumerable: true, - configurable: true, - writable: true - }) - } else if (writable) { - e.stack = stacktrace - } + rebindErrorStacktrace(e, stacktrace) } }, listen(port?: number, isRestart?: boolean) { diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index 1eaaa1ac0a9078..b68b104461c0b3 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -2,7 +2,7 @@ import fs from 'fs' import path from 'path' import { ViteDevServer } from '..' import { cleanUrl, resolveFrom, unwrapId } from '../utils' -import { ssrRewriteStacktrace } from './ssrStacktrace' +import { rebindErrorStacktrace, ssrRewriteStacktrace } from './ssrStacktrace' import { ssrExportAllKey, ssrModuleExportsKey, @@ -142,20 +142,7 @@ async function instantiateModule( ) } catch (e) { const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) - const { configurable, writable } = Object.getOwnPropertyDescriptor( - e, - 'stack' - )! - if (configurable) { - Object.defineProperty(e, 'stack', { - value: stacktrace, - enumerable: true, - configurable: true, - writable: true - }) - } else if (writable) { - e.stack = stacktrace - } + rebindErrorStacktrace(e, stacktrace) server.config.logger.error( `Error when evaluating SSR module ${url}:\n${stacktrace}`, { diff --git a/packages/vite/src/node/ssr/ssrStacktrace.ts b/packages/vite/src/node/ssr/ssrStacktrace.ts index d20365f7106fd0..4dda7eb9eb175d 100644 --- a/packages/vite/src/node/ssr/ssrStacktrace.ts +++ b/packages/vite/src/node/ssr/ssrStacktrace.ts @@ -56,3 +56,20 @@ export function ssrRewriteStacktrace( }) .join('\n') } + +export function rebindErrorStacktrace(e: Error, stacktrace: string): void { + const { configurable, writable } = Object.getOwnPropertyDescriptor( + e, + 'stack' + )! + if (configurable) { + Object.defineProperty(e, 'stack', { + value: stacktrace, + enumerable: true, + configurable: true, + writable: true + }) + } else if (writable) { + e.stack = stacktrace + } +}