From 6407b0518fea89146db65fc725ff049d7ad7a86a Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Wed, 7 May 2025 17:33:36 +0700 Subject: [PATCH] fix: optimize typechecking performance --- lib/discord/types/index.ts | 2 +- lib/modules/src/finders/_internal.ts | 2 +- lib/modules/src/finders/filters.ts | 33 +++++++++++++--------------- lib/modules/src/finders/find.ts | 4 ++-- lib/modules/src/finders/lookup.ts | 2 +- lib/modules/src/finders/wait.ts | 2 +- lib/utils/src/proxy.ts | 2 +- 7 files changed, 22 insertions(+), 25 deletions(-) diff --git a/lib/discord/types/index.ts b/lib/discord/types/index.ts index d7acacf..df61e33 100644 --- a/lib/discord/types/index.ts +++ b/lib/discord/types/index.ts @@ -339,7 +339,7 @@ export namespace DiscordModules { variant?: TableRowVariant } - export type TableRow = FC & { + export interface TableRow extends FC { Arrow: FC Icon: TableRowIcon } diff --git a/lib/modules/src/finders/_internal.ts b/lib/modules/src/finders/_internal.ts index f6476f3..f30576c 100644 --- a/lib/modules/src/finders/_internal.ts +++ b/lib/modules/src/finders/_internal.ts @@ -4,7 +4,7 @@ import type { If } from '@revenge-mod/utils/types' import type { Metro } from '../../types' import type { Filter } from './filters' -export type RunFilterOptions = { +export interface RunFilterOptions { /** * Whether to skip checking the default export. * diff --git a/lib/modules/src/finders/filters.ts b/lib/modules/src/finders/filters.ts index 810b87f..6d8ff8f 100644 --- a/lib/modules/src/finders/filters.ts +++ b/lib/modules/src/finders/filters.ts @@ -9,11 +9,14 @@ export type FilterResult = F extends Filter ? R : never export type IsFilterWithExports = F extends Filter ? WE : never -export type Filter<_Inferable = any, WithExports extends boolean = boolean> = If< - WithExports, - (id: Metro.ModuleID, exports: Metro.ModuleExports) => boolean, - (id: Metro.ModuleID, exports?: undefined) => boolean -> & { +export interface Filter<_Inferable = any, WithExports extends boolean = boolean> { + ( + ...args: If< + WithExports, + [id: Metro.ModuleID, exports: Metro.ModuleExports], + [id: Metro.ModuleID, exports?: never] + > + ): boolean key: string } @@ -67,7 +70,7 @@ export type ByProps = = Record>( * Filter modules by their exports having all of the specified properties. * * @param prop The property to check for. - * @param props The rest of the properties to check for (optional). + * @param props More properties to check for (optional). * * @example * ```ts @@ -81,10 +84,7 @@ export const byProps = createFilterGenerator>( props => `revenge.props(${props.join(',')})`, ) as ByProps -export type WithoutProps = , K extends string>( - prop: K, - ...props: K[] -) => Filter, true> +export type WithoutProps = >(prop: string, ...props: string[]) => Filter /** * Filter modules by their exports having none of the specified properties. @@ -98,9 +98,7 @@ export const withoutProps = createFilterGenerator>( props => `revenge.withoutProps(${props.join(',')})`, ) as WithoutProps -export type ByName = ( - name: T extends string ? T : T extends { name: string } ? T['name'] : string, -) => Filter +export type ByName = (name: string) => Filter /** * Filter modules by their exports having the specified name. @@ -112,7 +110,7 @@ export type ByName = ( * @example Auto-typing as object * ```ts * const SomeComponent = await findModule(byName('SomeComponent')) - * // const SomeComponent: { name: 'SomeComponent' } + * // const SomeComponent: object * ``` * * @example Typing as function component @@ -137,14 +135,13 @@ export const byName = createFilterGenerator>( ([name]) => `revenge.name(${name})`, ) as ByName -export type RelativeDependency = object & { +export interface RelativeDependency { valueOf(): Metro.ModuleID r?: boolean } -export type ComparableDependencyMap = Array< - Metro.ModuleID | RelativeDependency | undefined | ComparableDependencyMap -> & { +export interface ComparableDependencyMap + extends Array { l?: boolean } diff --git a/lib/modules/src/finders/find.ts b/lib/modules/src/finders/find.ts index 13396c9..9a13bb0 100644 --- a/lib/modules/src/finders/find.ts +++ b/lib/modules/src/finders/find.ts @@ -8,7 +8,7 @@ import type { Metro } from '../../types' import type { RunFilterReturnExportsOptions } from './_internal' import type { Filter, FilterResult } from './filters' -export type BaseFindModuleOptions = { +export interface BaseFindModuleOptions { /** * Abort signal for the find. */ @@ -191,7 +191,7 @@ export function findModuleByImportedPath(path: string, options?: BaseFindModu }) } -export type BaseFindModuleSyncOptions = BaseFindModuleOptions & ProxifyOptions +export interface BaseFindModuleSyncOptions extends BaseFindModuleOptions, ProxifyOptions {} export type FindModuleSyncOptions< ReturnNamespace extends boolean = boolean, IncludeUninitialized extends boolean = boolean, diff --git a/lib/modules/src/finders/lookup.ts b/lib/modules/src/finders/lookup.ts index fc48380..1750d4e 100644 --- a/lib/modules/src/finders/lookup.ts +++ b/lib/modules/src/finders/lookup.ts @@ -13,7 +13,7 @@ import type { MaybeDefaultExportMatched } from '.' import type { Metro } from '../../types' import type { Filter, FilterResult } from './filters' -export type BaseLookupModulesOptions = RunFilterOptions & { +export interface BaseLookupModulesOptions extends RunFilterOptions { /** * Whether to include initialized modules in the lookup. * diff --git a/lib/modules/src/finders/wait.ts b/lib/modules/src/finders/wait.ts index 876e9af..b9dc33d 100644 --- a/lib/modules/src/finders/wait.ts +++ b/lib/modules/src/finders/wait.ts @@ -10,7 +10,7 @@ import type { MaybeDefaultExportMatched } from '.' import type { Metro } from '../../types' import type { Filter, FilterResult } from './filters' -export type BaseWaitForModulesOptions = { +export interface BaseWaitForModulesOptions { /** * Whether to include all modules, including ones with bad exports. * diff --git a/lib/utils/src/proxy.ts b/lib/utils/src/proxy.ts index 14e1636..6366cd8 100644 --- a/lib/utils/src/proxy.ts +++ b/lib/utils/src/proxy.ts @@ -53,7 +53,7 @@ const _proxifyHandler = { }, } as ProxyHandler -export type ProxifyOptions = { +export interface ProxifyOptions { /** * The hint for the proxified value. *