diff --git a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts index cae67457967f40..a791a3516268e5 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts @@ -1531,3 +1531,43 @@ test('combine mappings', async () => { `) } }) + +test('deps', async () => { + const result = await ssrTransformSimple(`\ +import a from "a"; +export { b } from "b"; +export * from "c"; +export * as d from "d"; +import("e") +export * as A from "a"; +`) + expect(result?.code).toMatchInlineSnapshot(` + "Object.defineProperty(__vite_ssr_exports__, "b", { enumerable: true, configurable: true, get(){ return __vite_ssr_import_1__.b }}); + Object.defineProperty(__vite_ssr_exports__, "d", { enumerable: true, configurable: true, get(){ return __vite_ssr_import_3__ }}); + Object.defineProperty(__vite_ssr_exports__, "A", { enumerable: true, configurable: true, get(){ return __vite_ssr_import_4__ }}); + const __vite_ssr_import_0__ = await __vite_ssr_import__("a", {"importedNames":["default"]}); + const __vite_ssr_import_1__ = await __vite_ssr_import__("b", {"importedNames":["b"]}); + const __vite_ssr_import_2__ = await __vite_ssr_import__("c");__vite_ssr_exportAll__(__vite_ssr_import_2__); + + const __vite_ssr_import_3__ = await __vite_ssr_import__("d");const __vite_ssr_import_4__ = await __vite_ssr_import__("a"); + __vite_ssr_dynamic_import__("e"); + + " + `) + expect({ + deps: result?.deps, + dynamicDeps: result?.dynamicDeps, + }).toMatchInlineSnapshot(` + { + "deps": [ + "a", + "b", + "c", + "d", + ], + "dynamicDeps": [ + "e", + ], + } + `) +}) diff --git a/packages/vite/src/node/ssr/runtime/__tests__/fixtures/has-error-first-comment.ts b/packages/vite/src/node/ssr/runtime/__tests__/fixtures/has-error-first-comment.ts new file mode 100644 index 00000000000000..bd303498e102a6 --- /dev/null +++ b/packages/vite/src/node/ssr/runtime/__tests__/fixtures/has-error-first-comment.ts @@ -0,0 +1,2 @@ +// comment +throw new Error('__TEST__') diff --git a/packages/vite/src/node/ssr/runtime/__tests__/fixtures/has-error-first.js b/packages/vite/src/node/ssr/runtime/__tests__/fixtures/has-error-first.js new file mode 100644 index 00000000000000..302ec6e81b8c0d --- /dev/null +++ b/packages/vite/src/node/ssr/runtime/__tests__/fixtures/has-error-first.js @@ -0,0 +1 @@ +throw new Error('__TEST__') diff --git a/packages/vite/src/node/ssr/runtime/__tests__/server-source-maps.spec.ts b/packages/vite/src/node/ssr/runtime/__tests__/server-source-maps.spec.ts index b519ee4dd0a7ee..6e3238dfee51fc 100644 --- a/packages/vite/src/node/ssr/runtime/__tests__/server-source-maps.spec.ts +++ b/packages/vite/src/node/ssr/runtime/__tests__/server-source-maps.spec.ts @@ -65,6 +65,23 @@ describe('module runner initialization', async () => { ) }) + it('stacktrace column on first line', async ({ runner, server }) => { + // column is off by "use strict" + const topLevelError = await getError(() => + runner.import('/fixtures/has-error-first.js'), + ) + expect(serializeStack(server, topLevelError)).toBe( + ' at /fixtures/has-error-first.js:1:18', + ) + + const topLevelErrorTs = await getError(() => + runner.import('/fixtures/has-error-first-comment.ts'), + ) + expect(serializeStack(server, topLevelErrorTs)).toBe( + ' at /fixtures/has-error-first-comment.ts:2:17', + ) + }) + it('deep stacktrace', async ({ runner, server }) => { const methodError = await getError(async () => { const mod = await runner.import('/fixtures/has-error-deep.ts')