import { type GetEnsResolverErrorType, type GetEnsResolverParameters, type GetEnsResolverReturnType, getEnsResolver, } from '../actions/getEnsResolver.js' import type { Config } from '../createConfig.js' import type { ScopeKeyParameter } from '../types/properties.js' import type { QueryOptions, QueryParameter } from '../types/query.js' import type { Compute, ExactPartial } from '../types/utils.js' import { filterQueryOptions } from './utils.js' export type GetEnsResolverOptions< config extends Config, selectData = GetEnsResolverData, > = Compute< ExactPartial> & ScopeKeyParameter > & QueryParameter< GetEnsResolverQueryFnData, GetEnsResolverErrorType, selectData, GetEnsResolverQueryKey > export function getEnsResolverQueryOptions< config extends Config, selectData = GetEnsResolverData, >( config: config, options: GetEnsResolverOptions = {}, ): GetEnsResolverQueryOptions { return { ...options.query, enabled: Boolean(options.name && (options.query?.enabled ?? true)), queryFn: async (context) => { const [, { scopeKey: _, ...parameters }] = context.queryKey if (!parameters.name) throw new Error('name is required') return getEnsResolver(config, { ...parameters, name: parameters.name }) }, queryKey: getEnsResolverQueryKey(options), } } export type GetEnsResolverQueryFnData = GetEnsResolverReturnType export type GetEnsResolverData = GetEnsResolverQueryFnData export function getEnsResolverQueryKey( options: Compute< ExactPartial> & ScopeKeyParameter > = {}, ) { return ['ensResolver', filterQueryOptions(options)] as const } export type GetEnsResolverQueryKey = ReturnType< typeof getEnsResolverQueryKey > export type GetEnsResolverQueryOptions< config extends Config, selectData = GetEnsResolverData, > = QueryOptions< GetEnsResolverQueryFnData, GetEnsResolverErrorType, selectData, GetEnsResolverQueryKey >