From f79c3efb7c15571e90f2d5dd1496e5fa0bb5afaf Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 2 May 2022 13:42:03 -0700 Subject: [PATCH 1/3] chore: do not fixStacktrace --- docs/guide/api-javascript.md | 5 +-- packages/vite/src/node/server/index.ts | 15 ++------ .../ssr/__tests__/ssrModuleLoader.spec.ts | 5 --- packages/vite/src/node/ssr/ssrModuleLoader.ts | 35 +++---------------- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/docs/guide/api-javascript.md b/docs/guide/api-javascript.md index 33202e0d608238..1a0e2af1d2a352 100644 --- a/docs/guide/api-javascript.md +++ b/docs/guide/api-javascript.md @@ -96,10 +96,7 @@ interface ViteDevServer { /** * Load a given URL as an instantiated module for SSR. */ - ssrLoadModule( - url: string, - options?: { fixStacktrace?: boolean } - ): Promise> + ssrLoadModule(url: string): Promise> /** * Fix ssr error stacktrace. */ diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 4dafb7fc99b335..0a8c2a6166a390 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -199,10 +199,7 @@ export interface ViteDevServer { /** * Load a given URL as an instantiated module for SSR. */ - ssrLoadModule( - url: string, - opts?: { fixStacktrace?: boolean } - ): Promise> + ssrLoadModule(url: string): Promise> /** * Returns a fixed version of the given stack */ @@ -323,7 +320,7 @@ export async function createServer( return transformRequest(url, server, options) }, transformIndexHtml: null!, // to be immediately set - async ssrLoadModule(url, opts?: { fixStacktrace?: boolean }) { + async ssrLoadModule(url) { if (!server._ssrExternals) { let knownImports: string[] = [] const optimizedDeps = server._optimizedDeps @@ -336,13 +333,7 @@ export async function createServer( } server._ssrExternals = resolveSSRExternal(config, knownImports) } - return ssrLoadModule( - url, - server, - undefined, - undefined, - opts?.fixStacktrace - ) + return ssrLoadModule(url, server, undefined, undefined) }, ssrFixStacktrace(e) { if (e.stack) { diff --git a/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts index 4b494524d45c72..20fa1f6103ac33 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts @@ -22,9 +22,4 @@ test('always throw error when evaluating an wrong SSR module', async () => { expectedErrors.forEach((error) => { expect(error?.message).toContain(THROW_MESSAGE) }) - expect(spy).toBeCalledTimes(1) - const [firstParameter] = spy.mock.calls[0] - expect(firstParameter).toContain('Error when evaluating SSR module') - expect(firstParameter).toContain(THROW_MESSAGE) - spy.mockClear() }) diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index c552d5431881eb..0eac3655c2ffe5 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -20,7 +20,6 @@ import { ssrImportMetaKey, ssrModuleExportsKey } from './ssrTransform' -import { rebindErrorStacktrace, ssrRewriteStacktrace } from './ssrStacktrace' interface SSRContext { global: typeof globalThis @@ -35,8 +34,7 @@ export async function ssrLoadModule( url: string, server: ViteDevServer, context: SSRContext = { global }, - urlStack: string[] = [], - fixStacktrace?: boolean + urlStack: string[] = [] ): Promise { url = unwrapId(url).replace(NULL_BYTE_PLACEHOLDER, '\0') @@ -49,13 +47,7 @@ export async function ssrLoadModule( return pending } - const modulePromise = instantiateModule( - url, - server, - context, - urlStack, - fixStacktrace - ) + const modulePromise = instantiateModule(url, server, context, urlStack) pendingModules.set(url, modulePromise) modulePromise .catch(() => { @@ -71,8 +63,7 @@ async function instantiateModule( url: string, server: ViteDevServer, context: SSRContext = { global }, - urlStack: string[] = [], - fixStacktrace?: boolean + urlStack: string[] = [] ): Promise { const { moduleGraph } = server const mod = await moduleGraph.ensureEntryFromUrl(url, true) @@ -143,13 +134,7 @@ async function instantiateModule( if (pendingDeps.length === 1) { pendingImports.set(url, pendingDeps) } - const mod = await ssrLoadModule( - dep, - server, - context, - urlStack, - fixStacktrace - ) + const mod = await ssrLoadModule(dep, server, context, urlStack) if (pendingDeps.length === 1) { pendingImports.delete(url) } else { @@ -206,18 +191,6 @@ async function instantiateModule( ) } catch (e) { mod.ssrError = e - if (e.stack && fixStacktrace !== false) { - const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) - rebindErrorStacktrace(e, stacktrace) - server.config.logger.error( - `Error when evaluating SSR module ${url}:\n${stacktrace}`, - { - timestamp: true, - clear: server.config.clearScreen, - error: e - } - ) - } throw e } From a69a667129749693ad54e02ece5c624a42296706 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Fri, 20 May 2022 14:36:07 -0700 Subject: [PATCH 2/3] Revert "chore: do not fixStacktrace" This reverts commit 800aef60011dac911eb5f3eb1c401a5e208e8fca. --- docs/guide/api-javascript.md | 5 ++- packages/vite/src/node/server/index.ts | 15 ++++++-- .../ssr/__tests__/ssrModuleLoader.spec.ts | 5 +++ packages/vite/src/node/ssr/ssrModuleLoader.ts | 35 ++++++++++++++++--- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/docs/guide/api-javascript.md b/docs/guide/api-javascript.md index 1a0e2af1d2a352..33202e0d608238 100644 --- a/docs/guide/api-javascript.md +++ b/docs/guide/api-javascript.md @@ -96,7 +96,10 @@ interface ViteDevServer { /** * Load a given URL as an instantiated module for SSR. */ - ssrLoadModule(url: string): Promise> + ssrLoadModule( + url: string, + options?: { fixStacktrace?: boolean } + ): Promise> /** * Fix ssr error stacktrace. */ diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 0a8c2a6166a390..4dafb7fc99b335 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -199,7 +199,10 @@ export interface ViteDevServer { /** * Load a given URL as an instantiated module for SSR. */ - ssrLoadModule(url: string): Promise> + ssrLoadModule( + url: string, + opts?: { fixStacktrace?: boolean } + ): Promise> /** * Returns a fixed version of the given stack */ @@ -320,7 +323,7 @@ export async function createServer( return transformRequest(url, server, options) }, transformIndexHtml: null!, // to be immediately set - async ssrLoadModule(url) { + async ssrLoadModule(url, opts?: { fixStacktrace?: boolean }) { if (!server._ssrExternals) { let knownImports: string[] = [] const optimizedDeps = server._optimizedDeps @@ -333,7 +336,13 @@ export async function createServer( } server._ssrExternals = resolveSSRExternal(config, knownImports) } - return ssrLoadModule(url, server, undefined, undefined) + return ssrLoadModule( + url, + server, + undefined, + undefined, + opts?.fixStacktrace + ) }, ssrFixStacktrace(e) { if (e.stack) { diff --git a/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts index 20fa1f6103ac33..4b494524d45c72 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts @@ -22,4 +22,9 @@ test('always throw error when evaluating an wrong SSR module', async () => { expectedErrors.forEach((error) => { expect(error?.message).toContain(THROW_MESSAGE) }) + expect(spy).toBeCalledTimes(1) + const [firstParameter] = spy.mock.calls[0] + expect(firstParameter).toContain('Error when evaluating SSR module') + expect(firstParameter).toContain(THROW_MESSAGE) + spy.mockClear() }) diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index 0eac3655c2ffe5..c552d5431881eb 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -20,6 +20,7 @@ import { ssrImportMetaKey, ssrModuleExportsKey } from './ssrTransform' +import { rebindErrorStacktrace, ssrRewriteStacktrace } from './ssrStacktrace' interface SSRContext { global: typeof globalThis @@ -34,7 +35,8 @@ export async function ssrLoadModule( url: string, server: ViteDevServer, context: SSRContext = { global }, - urlStack: string[] = [] + urlStack: string[] = [], + fixStacktrace?: boolean ): Promise { url = unwrapId(url).replace(NULL_BYTE_PLACEHOLDER, '\0') @@ -47,7 +49,13 @@ export async function ssrLoadModule( return pending } - const modulePromise = instantiateModule(url, server, context, urlStack) + const modulePromise = instantiateModule( + url, + server, + context, + urlStack, + fixStacktrace + ) pendingModules.set(url, modulePromise) modulePromise .catch(() => { @@ -63,7 +71,8 @@ async function instantiateModule( url: string, server: ViteDevServer, context: SSRContext = { global }, - urlStack: string[] = [] + urlStack: string[] = [], + fixStacktrace?: boolean ): Promise { const { moduleGraph } = server const mod = await moduleGraph.ensureEntryFromUrl(url, true) @@ -134,7 +143,13 @@ async function instantiateModule( if (pendingDeps.length === 1) { pendingImports.set(url, pendingDeps) } - const mod = await ssrLoadModule(dep, server, context, urlStack) + const mod = await ssrLoadModule( + dep, + server, + context, + urlStack, + fixStacktrace + ) if (pendingDeps.length === 1) { pendingImports.delete(url) } else { @@ -191,6 +206,18 @@ async function instantiateModule( ) } catch (e) { mod.ssrError = e + if (e.stack && fixStacktrace !== false) { + const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) + rebindErrorStacktrace(e, stacktrace) + server.config.logger.error( + `Error when evaluating SSR module ${url}:\n${stacktrace}`, + { + timestamp: true, + clear: server.config.clearScreen, + error: e + } + ) + } throw e } From f8e82863be2a660f3a4bdb1e41247154590dc065 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Fri, 20 May 2022 14:38:00 -0700 Subject: [PATCH 3/3] chore: update fixStacktrace default --- packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts | 2 +- packages/vite/src/node/ssr/ssrModuleLoader.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts index 4b494524d45c72..0b97710d1d9bd6 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrModuleLoader.spec.ts @@ -11,7 +11,7 @@ test('always throw error when evaluating an wrong SSR module', async () => { const expectedErrors = [] for (const i of [0, 1]) { try { - await viteServer.ssrLoadModule(badjs) + await viteServer.ssrLoadModule(badjs, { fixStacktrace: true }) } catch (e) { expectedErrors.push(e) } diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index c552d5431881eb..7f9731c417c566 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -206,7 +206,7 @@ async function instantiateModule( ) } catch (e) { mod.ssrError = e - if (e.stack && fixStacktrace !== false) { + if (e.stack && fixStacktrace) { const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) rebindErrorStacktrace(e, stacktrace) server.config.logger.error(