From c5caa63cef92e4fc5ffe047dcbba958f98980c34 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Sun, 6 Apr 2025 00:10:13 +0700 Subject: [PATCH] fix(lib/modules/metro): fix bad exports check --- lib/modules/src/metro/_internal.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/modules/src/metro/_internal.ts b/lib/modules/src/metro/_internal.ts index b4b1299..4609309 100644 --- a/lib/modules/src/metro/_internal.ts +++ b/lib/modules/src/metro/_internal.ts @@ -84,6 +84,8 @@ export function _isExportBad(exp: Metro.ModuleExports) { // Nullish? exp === undefined || exp === null || + // Circular reference + exp === globalThis || // Is it a proxy? isProxy(exp) ) @@ -97,9 +99,13 @@ export function _isExportBad(exp: Metro.ModuleExports) { */ export function _isExportsBad(exports: Metro.ModuleExports) { return ( - // Exports will always be an object, we are checking if the object is empty - !Reflect.ownKeys(exports).length || - // Circular reference - exports === globalThis + // Nullish? + exports === undefined || + exports === null || + // Can't run isProxy() on this because this isn't your typical proxy: + // https://github.com/discord/react-native/blob/master/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp + (globalThis.nativeModuleProxy && exports === nativeModuleProxy) || + // Checking if the object is empty + (exports.__proto__ === Object.prototype && !Reflect.ownKeys(exports).length) ) }