diff --git a/.eslintignore b/.eslintignore index b42b824c7..ecb0c8801 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 fd9a6bb1e..1cd8823bb 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -253,6 +253,11 @@ 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) + 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 000000000..a71ce8145 --- /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 000000000..1cceeb03a --- /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 000000000..374d310c7 --- /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) +})