diff --git a/lib/modules/src/finders/filters/utils.ts b/lib/modules/src/finders/filters/utils.ts index b09ae32..0f3d101 100644 --- a/lib/modules/src/finders/filters/utils.ts +++ b/lib/modules/src/finders/filters/utils.ts @@ -1,3 +1,4 @@ +import { getErrorStack } from '@revenge-mod/utils/error' import { withProps } from '.' import { and, or } from './composite' import { FilterScopes } from './constants' @@ -203,8 +204,17 @@ export function createFilterGenerator( const isDefaultScopesStatic = typeof defaultScopes === 'number' const generator: GeneratorType = (...args: A) => { - const filter_ = ((id: Metro.ModuleID, exports?: Metro.ModuleExports) => - filter(args, id, exports)) as ReturnType + const filter_ = (( + id: Metro.ModuleID, + exports?: Metro.ModuleExports, + ) => { + try { + return filter(args, id, exports) + } catch (e) { + DEBUG_warnFilterThrown(id, keyFor(args), e) + return false + } + }) as ReturnType filter_.key = keyFor(args) filter_.flags = isFlagsStatic ? flagFor : flagFor(args) @@ -226,3 +236,14 @@ export function createFilterGenerator( return generator } + +function DEBUG_warnFilterThrown( + id: Metro.ModuleID, + key: string, + error: unknown, +) { + nativeLoggingHook( + `\u001b[31mFilter ${key} threw an error for module ${id}:\n${getErrorStack(error)}\u001b[0m`, + 3, + ) +}