From 3520bcae4191a72dd1d3e1c69598f9097ed136d7 Mon Sep 17 00:00:00 2001 From: Carlos Rodrigues Date: Sun, 1 May 2022 09:58:58 +0100 Subject: [PATCH 1/2] fix: self exported module call stack error --- .eslintignore | 1 + packages/vite-node/src/client.ts | 7 +++++++ test/core/src/self/foo.ts | 5 +++++ test/core/src/self/index.ts | 4 ++++ test/core/test/self.test.ts | 7 +++++++ 5 files changed, 24 insertions(+) create mode 100644 test/core/src/self/foo.ts create mode 100644 test/core/src/self/index.ts create mode 100644 test/core/test/self.test.ts diff --git a/.eslintignore b/.eslintignore index b42b824c7f86..ecb0c8801995 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,4 @@ node_modules *.d.ts coverage !.vitepress +test/core/src/self \ No newline at end of file diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index fd9a6bb1e7e2..34607e8ade68 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -253,6 +253,13 @@ function proxyMethod(name: 'get' | 'set' | 'has' | 'deleteProperty', tryDefault: } function exportAll(exports: any, sourceModule: any) { + // #1120 when a module exports itself it causes + // call stack error + if (exports === sourceModule) { + // eslint-disable-next-line no-console + console.warn('[vite-node] module is being self exported', sourceModule) + return + } // eslint-disable-next-line no-restricted-syntax for (const key in sourceModule) { if (key !== 'default') { diff --git a/test/core/src/self/foo.ts b/test/core/src/self/foo.ts new file mode 100644 index 000000000000..a71ce81458b3 --- /dev/null +++ b/test/core/src/self/foo.ts @@ -0,0 +1,5 @@ +/* eslint-disable */ + +export function foo(): true { + return true; +} \ No newline at end of file diff --git a/test/core/src/self/index.ts b/test/core/src/self/index.ts new file mode 100644 index 000000000000..1cceeb03af65 --- /dev/null +++ b/test/core/src/self/index.ts @@ -0,0 +1,4 @@ +/* eslint-disable */ + +export * from './foo'; +export * from './index'; // <-- wrong \ No newline at end of file diff --git a/test/core/test/self.test.ts b/test/core/test/self.test.ts new file mode 100644 index 000000000000..374d310c7b98 --- /dev/null +++ b/test/core/test/self.test.ts @@ -0,0 +1,7 @@ +import { expect, it } from 'vitest' +import { foo } from '../src/self' + +// #1220 self export module +it('self export', () => { + expect(foo()).toBe(true) +}) From 5bfa7b829af698a78b27491c77ba68a3f26a33f2 Mon Sep 17 00:00:00 2001 From: Carlos Rodrigues Date: Sun, 1 May 2022 17:27:23 +0100 Subject: [PATCH 2/2] remove warning --- packages/vite-node/src/client.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index 34607e8ade68..1cd8823bbe42 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -255,11 +255,9 @@ function proxyMethod(name: 'get' | 'set' | 'has' | 'deleteProperty', tryDefault: function exportAll(exports: any, sourceModule: any) { // #1120 when a module exports itself it causes // call stack error - if (exports === sourceModule) { - // eslint-disable-next-line no-console - console.warn('[vite-node] module is being self exported', sourceModule) + if (exports === sourceModule) return - } + // eslint-disable-next-line no-restricted-syntax for (const key in sourceModule) { if (key !== 'default') {