From 2c0203d42e03b1e561a5e6d40558e386bcdf09ca Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Wed, 1 Apr 2026 13:34:42 +0700 Subject: [PATCH] fix(lib/modules/finders/lookup): in cached results, respect filter scopes and yield uninitialized if specified instead of skipping --- lib/modules/src/finders/lookup.ts | 58 +++++++++++++++---------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/lib/modules/src/finders/lookup.ts b/lib/modules/src/finders/lookup.ts index 672b5ca..604c761 100644 --- a/lib/modules/src/finders/lookup.ts +++ b/lib/modules/src/finders/lookup.ts @@ -47,19 +47,18 @@ export type LookupModulesResult< O extends LookupModulesOptions, > = [exports: LookupFilterResult, id: Metro.ModuleID] -type LookupFilterResult< - F extends Filter, - O extends LookupModulesOptions, -> = O extends LookupModulesOptions - ? InitializedLookupFilterResult | undefined - : InitializedLookupFilterResult +type LookupFilterResult = + O extends LookupModulesOptions + ? InitializedLookupFilterResult | undefined + : InitializedLookupFilterResult type InitializedLookupFilterResult< F extends Filter, O extends LookupModulesOptions, -> = O extends RunFilterReturnExportsOptions - ? MaybeDefaultExportMatched> - : FilterResult +> = + O extends RunFilterReturnExportsOptions + ? MaybeDefaultExportMatched> + : FilterResult export const NotFoundResult: readonly [] = Object.freeze([]) @@ -92,6 +91,11 @@ export function* lookupModules(filter: Filter, options?: LookupModulesOptions) { let notFound = true let cached: Set | undefined + const scopes = filter.scopes + const includeAll = scopes & FilterScopes.All + const includeInit = includeAll || scopes & FilterScopes.Initialized + const includeUninit = includeAll || scopes & FilterScopes.Uninitialized + if (options?.cached ?? true) { const notInit = !(options?.initialize ?? true) @@ -107,12 +111,15 @@ export function* lookupModules(filter: Filter, options?: LookupModulesOptions) { const id = Number(sId) let exports: Metro.ModuleExports | undefined - if (isModuleInitialized(id)) + if (includeInit && isModuleInitialized(id)) exports = getInitializedModuleExports(id) - else { - if (notInit) continue + else if (includeUninit) { + if (notInit) { + yield [undefined, id] + continue + } exports = metroRequire(id) - } + } else continue cached.add(id) @@ -124,9 +131,6 @@ export function* lookupModules(filter: Filter, options?: LookupModulesOptions) { } } - const scopes = filter.scopes - const includeAll = scopes & FilterScopes.All - if (includeAll) { for (const id of mList.keys()) { // biome-ignore lint/complexity/useOptionalChain: Hot path should be optimized @@ -156,9 +160,6 @@ export function* lookupModules(filter: Filter, options?: LookupModulesOptions) { } } } else { - const includeInit = scopes & FilterScopes.Initialized - const includeUninit = scopes & FilterScopes.Uninitialized - if (includeInit) for (const id of mInitialized) { // biome-ignore lint/complexity/useOptionalChain: Hot path should be optimized @@ -233,6 +234,11 @@ export function lookupModule< >(filter: F, options: O): LookupModulesResult | LookupNotFoundResult export function lookupModule(filter: Filter, options?: LookupModulesOptions) { + const scopes = filter.scopes + const includeAll = scopes & FilterScopes.All + const includeInit = includeAll || scopes & FilterScopes.Initialized + const includeUninit = includeAll || scopes & FilterScopes.Uninitialized + if (options?.cached ?? true) { const notInit = !(options?.initialize ?? true) @@ -246,12 +252,12 @@ export function lookupModule(filter: Filter, options?: LookupModulesOptions) { const id = Number(sId) let exports: Metro.ModuleExports | undefined - if (isModuleInitialized(id)) + if (includeInit && isModuleInitialized(id)) exports = getInitializedModuleExports(id) - else { - if (notInit) continue + else if (includeUninit) { + if (notInit) return [undefined, id] exports = metroRequire(id) - } + } else continue if (__BUILD_FLAG_DEBUG_MODULE_LOOKUPS__) DEBUG_logLookupMatched(filter.key, flag, id, true) @@ -260,9 +266,6 @@ export function lookupModule(filter: Filter, options?: LookupModulesOptions) { } } - const scopes = filter.scopes - const includeAll = scopes & FilterScopes.All - if (includeAll) { for (const id of mList.keys()) { const flag = runFilter( @@ -287,9 +290,6 @@ export function lookupModule(filter: Filter, options?: LookupModulesOptions) { } } } else { - const includeInit = scopes & FilterScopes.Initialized - const includeUninit = scopes & FilterScopes.Uninitialized - if (includeInit) for (const id of mInitialized) { const exports = getInitializedModuleExports(id)