From c239c5b4f86d3940c3074d93c62551deb59519e7 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Tue, 1 Jul 2025 17:45:49 +0700 Subject: [PATCH] fix(lib/modules/finders): improve perf, correct docs --- lib/modules/src/finders/get.ts | 6 ++++-- lib/modules/src/finders/lookup.ts | 33 ++++++++++--------------------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/lib/modules/src/finders/get.ts b/lib/modules/src/finders/get.ts index cbbf005..dfb1802 100644 --- a/lib/modules/src/finders/get.ts +++ b/lib/modules/src/finders/get.ts @@ -92,13 +92,15 @@ export function getModule( } else for (const [exports, id] of lookupModules(filter, options!)) { callback(exports, id) - if (--max === 0) return noopFalse + max-- + if (!max) return noopFalse } const unsub = waitForModules( filter, (exports, id) => { - if (--max === 0) unsub() + max-- + if (!max) unsub() callback(exports, id) }, options!, diff --git a/lib/modules/src/finders/lookup.ts b/lib/modules/src/finders/lookup.ts index a692b70..7687316 100644 --- a/lib/modules/src/finders/lookup.ts +++ b/lib/modules/src/finders/lookup.ts @@ -27,9 +27,7 @@ export interface BaseLookupModulesOptions< /** * Whether to include uninitialized modules in the lookup. * - * Options that require modules to be initialized (eg. `returnNamespace`, `skipDefault`) will be ignored during uninitialized module ID lookup. - * - * **This will initialize any modules that match the filter and may cause unintended side effects.** + * **This will initialize any modules that match the exportsless filter and may cause unintended side effects.** * * @default false */ @@ -116,6 +114,7 @@ export function* lookupModules(filter: Filter, options?: LookupModulesOptions) { // Return early if previous lookup was a full lookup and no modules were found if (reg === null) return + const noInitCached = !(options?.initializeCached ?? true) const cached = new Set() if (reg) @@ -125,18 +124,11 @@ export function* lookupModules(filter: Filter, options?: LookupModulesOptions) { let exports: Metro.ModuleExports | undefined if (!isModuleInitialized(id)) { - if (!(options?.initializeCached ?? true)) continue + if (noInitCached) continue exports = __r(id) - } + } else exports = getInitializedModuleExports(id) - yield [ - exportsFromFilterResultFlag( - flag, - (exports ??= getInitializedModuleExports(id)), - options, - ), - id, - ] + yield [exportsFromFilterResultFlag(flag, exports, options), id] } if (options?.includeInitialized ?? true) @@ -203,6 +195,8 @@ export function lookupModule(filter: Filter, options?: LookupModulesOptions) { // Return early if previous lookup was a full lookup and no modules were found if (reg === null) return [] + const noInitCached = !(options?.initializeCached ?? true) + if (reg) for (const sId in reg) { const flag = reg[sId] @@ -210,18 +204,11 @@ export function lookupModule(filter: Filter, options?: LookupModulesOptions) { let exports: Metro.ModuleExports if (!isModuleInitialized(id)) { - if (!(options?.initializeCached ?? true)) continue + if (noInitCached) continue exports = __r(id) - } + } else exports = getInitializedModuleExports(id) - return [ - exportsFromFilterResultFlag( - flag, - (exports ??= getInitializedModuleExports(id)), - options, - ), - id, - ] + return [exportsFromFilterResultFlag(flag, exports, options), id] } if (options?.includeInitialized ?? true)