From 6a6a67e78fa8f5d557a3bcfcae836b5721f72c1b Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Thu, 3 Jul 2025 20:45:48 +0700 Subject: [PATCH] feat(lib/modules/metro/utils): improve perf on bad module exports check --- lib/modules/src/metro/utils.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/modules/src/metro/utils.ts b/lib/modules/src/metro/utils.ts index aaf5c44..9e9aa47 100644 --- a/lib/modules/src/metro/utils.ts +++ b/lib/modules/src/metro/utils.ts @@ -78,17 +78,17 @@ export function isModuleExportBad( */ export function isModuleExportsBad(exports: Metro.ModuleExports): boolean { return ( + // Can't run isProxy() on this because this isn't your typical proxy: + // https://github.com/facebook/react-native/blob/master/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp + exports === nativeModuleProxy || // Nullish? exports == null || // Isn't an object or function? // - Number exports are not useful, usually just an asset ID // - String, Boolean, Symbol, BigInt exports are not useful (who would do `module.exports = ...`?) - !(typeof exports === 'object' || typeof exports === 'function') || - // Checking if the object is empty - (exports.__proto__ === Object.prototype && - !Reflect.ownKeys(exports).length) || - // Can't run isProxy() on this because this isn't your typical proxy: - // https://github.com/facebook/react-native/blob/master/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp - exports === nativeModuleProxy + !( + exports.__proto__ === Function.prototype || + (typeof exports === 'object' && Reflect.ownKeys(exports).length) + ) ) }