diff --git a/lib/modules/src/finders/find.ts b/lib/modules/src/finders/find.ts index ca17e80..6a766b4 100644 --- a/lib/modules/src/finders/find.ts +++ b/lib/modules/src/finders/find.ts @@ -15,9 +15,20 @@ export type BaseFindModuleOptions = { // TODO(modules/finders/find::options): Add an option to force initialize when module ID is known (find is cached). } -export type FindModuleOptions = WaitForModulesOptions & LookupModulesOptions & BaseFindModuleOptions +export type FindModuleOptions< + ReturnNamespace extends boolean = boolean, + IncludeUninitialized extends boolean = boolean, +> = WaitForModulesOptions & + LookupModulesOptions & + BaseFindModuleOptions -export type FindModuleIdOptions = LookupModuleIdsOptions & FindModuleOptions +export type FindModuleIdOptions = + LookupModuleIdsOptions & BaseFindModuleOptions + +export type FindModuleResult< + F extends Filter, + O extends FindModuleOptions, +> = O extends RunFilterReturnExportsOptions ? MaybeDefaultExportMatched> : FilterResult /** * Find a module. @@ -37,44 +48,40 @@ export type FindModuleIdOptions = LookupModuleIdsOptions & FindModuleOptions */ export function findModule(filter: F): Promise> -export function findModule( - filter: F, - options: O, -): Promise ? MaybeDefaultExportMatched> : FilterResult> +export function findModule< + F extends O extends FindModuleOptions ? Filter : Filter, + O extends FindModuleOptions, +>(filter: F, options: O): Promise> -export function findModule(filter: F, options?: O) { - type Result = FilterResult +export function findModule(filter: Filter, options?: FindModuleOptions) { + return new Promise((ok, err) => { + const exports = lookupModule(filter, options!) + if (exports != null) return ok(exports) - return new Promise ? MaybeDefaultExportMatched : Result>( - (ok, err) => { - const exports = lookupModule(filter, options!) - if (exports != null) return ok(exports) - - const unsub = waitForModules( - filter, - (_, exports) => { - unsub() - ok(exports) - }, - options!, - ) - - const onAbort = () => { + const unsub = waitForModules( + filter, + (_, exports) => { unsub() - err(new Error(`${findModule.name} aborted before resolved: ${filter.key}`)) + ok(exports) + }, + options!, + ) + + const onAbort = () => { + unsub() + err(new Error(`${findModule.name} aborted before resolved: ${filter.key}`)) + } + + const signal = options?.abortSignal + if (signal) { + if (signal.aborted) { + onAbort() + return } - const signal = options?.abortSignal - if (signal) { - if (signal.aborted) { - onAbort() - return - } - - signal.addEventListener('abort', onAbort, { once: true }) - } - }, - ) + signal.addEventListener('abort', onAbort, { once: true }) + } + }) } /** @@ -95,15 +102,11 @@ export function findModule(filter * const FlashListModule = __r(FlashListId) * ``` */ -export function findModuleId(filter: F): Promise - -export function findModuleId( - filter: F, - options: O, -): Promise ? MaybeDefaultExportMatched> : FilterResult> - -export function findModuleId(filter: Filter, options?: FindModuleIdOptions) { - return new Promise((ok, err) => { +export function findModuleId( + filter: O extends FindModuleIdOptions ? Filter : Filter, + options?: O, +): Promise { + return new Promise((ok, err) => { const id = lookupModuleId(filter, options) if (id != null) { ok(id) @@ -180,7 +183,10 @@ export function findModuleByImportedPath(path: string, options?: BaseFindModu } export type BaseFindModuleSyncOptions = BaseFindModuleOptions & ProxifyOptions -export type FindModuleSyncOptions = FindModuleOptions & BaseFindModuleSyncOptions +export type FindModuleSyncOptions< + ReturnNamespace extends boolean = boolean, + IncludeUninitialized extends boolean = boolean, +> = FindModuleOptions & BaseFindModuleSyncOptions /** * Find a module synchronously. @@ -212,14 +218,14 @@ export type FindModuleSyncOptions = FindModuleOptions & BaseFindModuleSyncOption * }) * ``` */ -export function findModuleSync(filter: F): FilterResult +export function findModuleSync(filter: F): FilterResult | undefined -export function findModuleSync( - filter: F, - options: O, -): O extends LookupModulesOptions ? MaybeDefaultExportMatched> : FilterResult +export function findModuleSync< + F extends O extends FindModuleSyncOptions ? Filter : Filter, + O extends FindModuleSyncOptions, +>(filter: F, options: O): FindModuleResult | undefined -export function findModuleSync(filter: F, options?: O) { +export function findModuleSync(filter: Filter, options?: FindModuleSyncOptions) { const exports = lookupModule(filter, options!) if (exports != null) return exports