'use client' import { type Config, type GetPublicClientParameters, type GetPublicClientReturnType, type ResolvedRegister, getPublicClient, watchPublicClient, } from '@wagmi/core' import type { Evaluate } from '@wagmi/core/internal' import { type DeepReadonly, type ShallowRef, readonly, shallowRef, } from 'vue-demi' import type { ConfigParameter, MaybeRefDeep } from '../types.js' import { cloneDeepUnref } from '../utils/cloneDeepUnref.js' import { useConfig } from './useConfig.js' export type UsePublicClientParameters< config extends Config = Config, chainId extends config['chains'][number]['id'] | number | undefined = | config['chains'][number]['id'] | undefined, > = MaybeRefDeep< Evaluate & ConfigParameter> > export type UsePublicClientReturnType< config extends Config = Config, chainId extends config['chains'][number]['id'] | number | undefined = | config['chains'][number]['id'] | undefined, > = ShallowRef>> /** https://wagmi.sh/react/api/hooks/usePublicClient */ export function usePublicClient< config extends Config = ResolvedRegister['config'], chainId extends config['chains'][number]['id'] | number | undefined = | config['chains'][number]['id'] | undefined, >( parameters: UsePublicClientParameters = {}, ): UsePublicClientReturnType { const config = useConfig(parameters) const publicClient = shallowRef( getPublicClient( config, cloneDeepUnref>( parameters as any, ), ), ) watchPublicClient(config, { onChange() { publicClient.value = getPublicClient( config, cloneDeepUnref>( parameters as any, ), ) }, }) return readonly(publicClient) as unknown as UsePublicClientReturnType< config, chainId > }