From b727aaa208ed682097eaedb32009c806631a9e2f Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Tue, 8 Apr 2025 22:51:05 +0700 Subject: [PATCH] feat(lib/modules/metro): improve bad export checks --- lib/modules/src/metro/_internal.ts | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/lib/modules/src/metro/_internal.ts b/lib/modules/src/metro/_internal.ts index 2e40e99..f3a50f2 100644 --- a/lib/modules/src/metro/_internal.ts +++ b/lib/modules/src/metro/_internal.ts @@ -74,19 +74,14 @@ export function _blacklist(id: Metro.ModuleID) { } /** - * Returns whether a particular export of a module is bad. - * @param export The exports of the module - * @returns Whether the module has bad exports - * @internal + * Returns whether a particular module export is bad. This is used for filter functions to check whether an export is filterable. + * @param exp The export to check */ -export function _isExportBad(exp: Metro.ModuleExports) { +export function _isExportBad(exp: Metro.ModuleExports[PropertyKey]) { return ( // Nullish? - exp === undefined || - exp === null || - // Circular reference - exp === globalThis || - // Is it a proxy? + exp == null || + // Is it a proxy? (discord-intl has proxy exports) isProxy(exp) ) } @@ -100,12 +95,11 @@ export function _isExportBad(exp: Metro.ModuleExports) { export function _isExportsBad(exports: Metro.ModuleExports) { return ( // Nullish? - exports === undefined || - exports === null || + exports == null || + // 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/discord/react-native/blob/master/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp - exports === nativeModuleProxy || - // Checking if the object is empty - (exports.__proto__ === Object.prototype && !Reflect.ownKeys(exports).length) + exports === nativeModuleProxy ) }