From 242a46381de89883fd20756082e84868d99b2586 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Mon, 14 Nov 2022 13:30:50 +0100 Subject: [PATCH 1/2] fix: don't ignore "default" key, when put on a function in CJS context --- packages/vite-node/src/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index 998464fc2028..fa4b71eb958f 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -273,7 +273,7 @@ export class ViteNodeRunner { // returns undefined, when accessing named exports, if default is not an object // but is still present inside hasOwnKeys, this is Node behaviour for CJS - if (exports.default === null || typeof exports.default !== 'object') { + if (isPrimitive(exports.default)) { defineExport(exports, p, () => undefined) return true } From cf093fb5ff9f6272ed490b9fddaf2c210a1522a5 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Mon, 14 Nov 2022 13:35:29 +0100 Subject: [PATCH 2/2] test: test case for default.default --- test/cjs/src/default-function.cjs | 8 ++++++++ test/cjs/src/default-function.d.cts | 3 +++ test/cjs/test/function-default.test.ts | 13 +++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 test/cjs/src/default-function.cjs create mode 100644 test/cjs/src/default-function.d.cts create mode 100644 test/cjs/test/function-default.test.ts diff --git a/test/cjs/src/default-function.cjs b/test/cjs/src/default-function.cjs new file mode 100644 index 000000000000..db64778ef506 --- /dev/null +++ b/test/cjs/src/default-function.cjs @@ -0,0 +1,8 @@ +'use strict' + +function format() { + return '' +} + +module.exports = format +module.exports.default = format diff --git a/test/cjs/src/default-function.d.cts b/test/cjs/src/default-function.d.cts new file mode 100644 index 000000000000..542d181f0123 --- /dev/null +++ b/test/cjs/src/default-function.d.cts @@ -0,0 +1,3 @@ +declare function format(): string + +export default format diff --git a/test/cjs/test/function-default.test.ts b/test/cjs/test/function-default.test.ts new file mode 100644 index 000000000000..51b4b6b930c0 --- /dev/null +++ b/test/cjs/test/function-default.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from 'vitest' +import format from '../src/default-function.cjs' + +describe('correctly puts default on default', () => { + it('works on default function', () => { + expect(format()).toBe('') + }) + + it('works on nested default function', () => { + // @ts-expect-error types defined only default + expect(format.default()).toBe('') + }) +})