From 8f619f3038d68315d44b6fc576a746f38278208d Mon Sep 17 00:00:00 2001 From: Marat Dulin Date: Mon, 2 Dec 2024 21:44:18 +0100 Subject: [PATCH] fix: global object conflicting property descriptors --- __tests__/esm/import.test.ts | 20 ++++++++++++++++++++ src/utils.ts | 7 ++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/__tests__/esm/import.test.ts b/__tests__/esm/import.test.ts index 04ec59d..36230de 100644 --- a/__tests__/esm/import.test.ts +++ b/__tests__/esm/import.test.ts @@ -102,6 +102,26 @@ export default code expect(res.cwd).toBe(process.cwd()) }) + it('should work with provided globals defined by accessors in the current global', async () => { + const OriginalBuffer = Buffer + Object.defineProperty(global, 'Buffer', { + get: () => OriginalBuffer, + set: () => { + // ok + } + }) + try { + const res = await importFromString('export const bufferType = typeof Buffer;', { + globals: { Buffer } + }) + expect(res.bufferType).toBe('function') + } finally { + Object.defineProperty(global, 'Buffer', { + value: OriginalBuffer + }) + } + }) + it('should have access the global object', async () => { const res = await importFromString('export const { greet } = global', { globals: { greet: 'hi' } diff --git a/src/utils.ts b/src/utils.ts index 80892e3..56ced08 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -96,8 +96,13 @@ export const createGlobalObject = (globals: Context, useCurrentGlobal: boolean): }) forEachPropertyKey(globals, propertyKey => { if (propertyKey in __GLOBAL__) { + const descriptor = Object.getOwnPropertyDescriptor(__GLOBAL__, propertyKey) + if (descriptor !== undefined) { + delete descriptor.get + delete descriptor.set + } Object.defineProperty(globalObject, propertyKey, { - ...Object.getOwnPropertyDescriptor(__GLOBAL__, propertyKey), + ...descriptor, value: globals[propertyKey as keyof Context] }) } else {