From 6b4e24102f58f85dcd285bfd7146dd7c6b03427f Mon Sep 17 00:00:00 2001 From: Unic Ape Date: Mon, 15 Jan 2024 12:12:20 +0800 Subject: [PATCH] chore: Added useBytecode useProof useStorageAt useTransactionReceipt --- .changeset/loud-buckets-raise.md | 6 ++ packages/nuxt/src/functions.ts | 4 + packages/vue/package.json | 4 +- packages/vue/src/exports/index.ts | 24 +++++ packages/vue/src/hooks/useAccount.ts | 18 ++-- packages/vue/src/hooks/useBytecode.ts | 77 ++++++++++++++++ packages/vue/src/hooks/useCall.ts | 7 +- packages/vue/src/hooks/useProof.ts | 82 +++++++++++++++++ packages/vue/src/hooks/useStorageAt.ts | 77 ++++++++++++++++ .../vue/src/hooks/useTransactionReceipt.ts | 88 +++++++++++++++++++ packages/vue/src/hooks/useVerifyMessage.ts | 2 +- pnpm-lock.yaml | 20 ++--- 12 files changed, 389 insertions(+), 20 deletions(-) create mode 100644 .changeset/loud-buckets-raise.md create mode 100644 packages/vue/src/hooks/useBytecode.ts create mode 100644 packages/vue/src/hooks/useProof.ts create mode 100644 packages/vue/src/hooks/useStorageAt.ts create mode 100644 packages/vue/src/hooks/useTransactionReceipt.ts diff --git a/.changeset/loud-buckets-raise.md b/.changeset/loud-buckets-raise.md new file mode 100644 index 0000000..0f6477f --- /dev/null +++ b/.changeset/loud-buckets-raise.md @@ -0,0 +1,6 @@ +--- +"@use-wagmi/nuxt": minor +"use-wagmi": minor +--- + +Added useBytecode useProof useStorageAt useTransactionReceipt diff --git a/packages/nuxt/src/functions.ts b/packages/nuxt/src/functions.ts index ab9610b..120ae3f 100644 --- a/packages/nuxt/src/functions.ts +++ b/packages/nuxt/src/functions.ts @@ -9,6 +9,7 @@ export const functions = [ 'useBlock', 'useBlockNumber', 'useBlockTransactionCount', + 'useBytecode', 'useCall', 'useChainId', 'useClient', @@ -30,6 +31,7 @@ export const functions = [ 'useGasPrice', 'useInfiniteReadContracts', 'useContractInfiniteReads', + 'useProof', 'usePublicClient', 'useReadContract', 'useContractRead', @@ -40,11 +42,13 @@ export const functions = [ 'useSignMessage', 'useSignTypedData', 'useSimulateContract', + 'useStorageAt', 'useSwitchAccount', 'useSwitchChain', 'useToken', 'useTransaction', 'useTransactionCount', + 'useTransactionReceipt', 'useVerifyMessage', 'useVerifyTypedData', 'useWalletClient', diff --git a/packages/vue/package.json b/packages/vue/package.json index 8886dad..d289a2e 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -78,8 +78,8 @@ } }, "dependencies": { - "@wagmi/connectors": "4.1.2", - "@wagmi/core": "2.1.2", + "@wagmi/connectors": "4.1.4", + "@wagmi/core": "2.2.1", "vue": "3.3.8", "vue-demi": "^0.14.6" }, diff --git a/packages/vue/src/exports/index.ts b/packages/vue/src/exports/index.ts index 88270cd..307cab5 100644 --- a/packages/vue/src/exports/index.ts +++ b/packages/vue/src/exports/index.ts @@ -58,6 +58,12 @@ export { useBlockTransactionCount, } from '../hooks/useBlockTransactionCount.js' +export { + type UseBytecodeParameters, + type UseBytecodeReturnType, + useBytecode, +} from '../hooks/useBytecode.js' + export { type UseCallParameters, type UseCallReturnType, @@ -176,6 +182,12 @@ export { useInfiniteReadContracts as useContractInfiniteReads, } from '../hooks/useInfiniteReadContracts.js' +export { + type UseProofParameters, + type UseProofReturnType, + useProof, +} from '../hooks/useProof.js' + export { type UsePublicClientParameters, type UsePublicClientReturnType, @@ -228,6 +240,12 @@ export { useSimulateContract, } from '../hooks/useSimulateContract.js' +export { + type UseStorageAtParameters, + type UseStorageAtReturnType, + useStorageAt, +} from '../hooks/useStorageAt.js' + export { type UseSwitchAccountParameters, type UseSwitchAccountReturnType, @@ -259,6 +277,12 @@ export { useTransactionCount, } from '../hooks/useTransactionCount.js' +export { + type UseTransactionReceiptParameters, + type UseTransactionReceiptReturnType, + useTransactionReceipt, +} from '../hooks/useTransactionReceipt.js' + export { type UseVerifyMessageParameters, type UseVerifyMessageReturnType, diff --git a/packages/vue/src/hooks/useAccount.ts b/packages/vue/src/hooks/useAccount.ts index 94749f3..c405ee6 100644 --- a/packages/vue/src/hooks/useAccount.ts +++ b/packages/vue/src/hooks/useAccount.ts @@ -1,7 +1,9 @@ 'use client' import { + type Config, type GetAccountReturnType, + type ResolvedRegister, getAccount, watchAccount, } from '@wagmi/core' @@ -17,14 +19,18 @@ import type { ConfigParameter, MaybeRefDeep } from '../types.js' import { updateState } from '../utils/updateState.js' import { useConfig } from './useConfig.js' -export type UseAccountParameters = MaybeRefDeep +export type UseAccountParameters = MaybeRefDeep< + ConfigParameter +> -export type UseAccountReturnType = ToRefs> +export type UseAccountReturnType = ToRefs< + DeepReadonly> +> /** https://wagmi.sh/react/api/hooks/useAccount */ -export function useAccount( - parameters: UseAccountParameters = {}, -): UseAccountReturnType { +export function useAccount( + parameters: UseAccountParameters = {}, +): UseAccountReturnType { const config = useConfig(parameters) const account = reactive(getAccount(config)) @@ -34,5 +40,5 @@ export function useAccount( }, }) - return toRefs(readonly(account)) + return toRefs(readonly(account)) as UseAccountReturnType } diff --git a/packages/vue/src/hooks/useBytecode.ts b/packages/vue/src/hooks/useBytecode.ts new file mode 100644 index 0000000..5ec3d6d --- /dev/null +++ b/packages/vue/src/hooks/useBytecode.ts @@ -0,0 +1,77 @@ +'use client' + +import { + type Config, + type GetBytecodeErrorType, + type ResolvedRegister, +} from '@wagmi/core' +import type { Evaluate } from '@wagmi/core/internal' +import { + type GetBytecodeData, + type GetBytecodeOptions, + type GetBytecodeQueryKey, + getBytecodeQueryOptions, +} from '@wagmi/core/query' +import { type GetBytecodeQueryFnData } from '@wagmi/core/query' +import { computed } from 'vue-demi' +import { + type ConfigParameter, + type DeepUnwrapRef, + type MaybeRefDeep, + type QueryParameter, +} from '../types.js' +import { cloneDeepUnref } from '../utils/cloneDeepUnref.js' +import { type UseQueryReturnType, useQuery } from '../utils/query.js' +import { useChainId } from './useChainId.js' +import { useConfig } from './useConfig.js' + +export type UseBytecodeParameters< + config extends Config = Config, + selectData = GetBytecodeData, +> = MaybeRefDeep< + Evaluate< + GetBytecodeOptions & + ConfigParameter & + QueryParameter< + GetBytecodeQueryFnData, + GetBytecodeErrorType, + selectData, + GetBytecodeQueryKey + > + > +> + +export type UseBytecodeReturnType = + UseQueryReturnType + +/** https://wagmi.sh/react/api/hooks/useBytecode */ +export function useBytecode< + config extends Config = ResolvedRegister['config'], + selectData = GetBytecodeData, +>( + parameters: UseBytecodeParameters = {}, +): UseBytecodeReturnType { + const config = useConfig(parameters) + const chainId = useChainId() + + const queryOptions = computed(() => { + const _parameters = cloneDeepUnref< + DeepUnwrapRef> + >(parameters as any) + + const { address, query = {} } = _parameters + const options = getBytecodeQueryOptions(config, { + ..._parameters, + chainId: _parameters.chainId ?? chainId.value, + }) + const enabled = Boolean(address && (query.enabled ?? true)) + + return { + ...query, + ...options, + enabled, + } + }) + + return useQuery(queryOptions as any) as UseBytecodeReturnType +} diff --git a/packages/vue/src/hooks/useCall.ts b/packages/vue/src/hooks/useCall.ts index 585cad1..4285f19 100644 --- a/packages/vue/src/hooks/useCall.ts +++ b/packages/vue/src/hooks/useCall.ts @@ -33,7 +33,12 @@ export type UseCallParameters< Evaluate< CallOptions & ConfigParameter & - QueryParameter + QueryParameter< + CallQueryFnData, + CallErrorType, + selectData, + CallQueryKey + > > > diff --git a/packages/vue/src/hooks/useProof.ts b/packages/vue/src/hooks/useProof.ts new file mode 100644 index 0000000..96d3f31 --- /dev/null +++ b/packages/vue/src/hooks/useProof.ts @@ -0,0 +1,82 @@ +'use client' + +import { + type Config, + type GetProofErrorType, + type ResolvedRegister, +} from '@wagmi/core' +import type { Evaluate } from '@wagmi/core/internal' +import { + type GetProofData, + type GetProofOptions, + type GetProofQueryKey, + getProofQueryOptions, +} from '@wagmi/core/query' +import { type GetProofQueryFnData } from '@wagmi/core/query' + +import { computed } from 'vue-demi' +import { + type ConfigParameter, + type DeepUnwrapRef, + type MaybeRefDeep, + type QueryParameter, +} from '../types.js' +import { cloneDeepUnref } from '../utils/cloneDeepUnref.js' +import { type UseQueryReturnType, useQuery } from '../utils/query.js' +import { useChainId } from './useChainId.js' +import { useConfig } from './useConfig.js' + +export type UseProofParameters< + config extends Config = Config, + selectData = GetProofData, +> = MaybeRefDeep< + Evaluate< + GetProofOptions & + ConfigParameter & + QueryParameter< + GetProofQueryFnData, + GetProofErrorType, + selectData, + GetProofQueryKey + > + > +> + +export type UseProofReturnType = UseQueryReturnType< + selectData, + GetProofErrorType +> + +/** https://wagmi.sh/react/api/hooks/useProof */ +export function useProof< + config extends Config = ResolvedRegister['config'], + selectData = GetProofData, +>( + parameters: UseProofParameters = {}, +): UseProofReturnType { + const config = useConfig(parameters) + const chainId = useChainId() + + const queryOptions = computed(() => { + const _parameters = + cloneDeepUnref>>( + parameters, + ) + + const { address, storageKeys, query = {} } = _parameters + + const options = getProofQueryOptions(config, { + ..._parameters, + chainId: _parameters.chainId ?? chainId.value, + }) + const enabled = Boolean(address && storageKeys && (query.enabled ?? true)) + + return { + ...query, + ...options, + enabled, + } + }) + + return useQuery(queryOptions as any) as UseProofReturnType +} diff --git a/packages/vue/src/hooks/useStorageAt.ts b/packages/vue/src/hooks/useStorageAt.ts new file mode 100644 index 0000000..1e6748a --- /dev/null +++ b/packages/vue/src/hooks/useStorageAt.ts @@ -0,0 +1,77 @@ +'use client' + +import { + type Config, + type GetStorageAtErrorType, + type ResolvedRegister, +} from '@wagmi/core' +import type { Evaluate } from '@wagmi/core/internal' +import { + type GetStorageAtData, + type GetStorageAtOptions, + type GetStorageAtQueryKey, + getStorageAtQueryOptions, +} from '@wagmi/core/query' +import { type GetStorageAtQueryFnData } from '@wagmi/core/query' +import { computed } from 'vue-demi' +import { + type ConfigParameter, + type DeepUnwrapRef, + type MaybeRefDeep, + type QueryParameter, +} from '../types.js' +import { cloneDeepUnref } from '../utils/cloneDeepUnref.js' +import { type UseQueryReturnType, useQuery } from '../utils/query.js' +import { useChainId } from './useChainId.js' +import { useConfig } from './useConfig.js' + +export type UseStorageAtParameters< + config extends Config = Config, + selectData = GetStorageAtData, +> = MaybeRefDeep< + Evaluate< + GetStorageAtOptions & + ConfigParameter & + QueryParameter< + GetStorageAtQueryFnData, + GetStorageAtErrorType, + selectData, + GetStorageAtQueryKey + > + > +> + +export type UseStorageAtReturnType = + UseQueryReturnType + +/** https://wagmi.sh/react/api/hooks/useStorageAt */ +export function useStorageAt< + config extends Config = ResolvedRegister['config'], + selectData = GetStorageAtData, +>( + parameters: UseStorageAtParameters = {}, +): UseStorageAtReturnType { + const config = useConfig(parameters) + const chainId = useChainId() + + const queryOptions = computed(() => { + const _parameters = cloneDeepUnref< + DeepUnwrapRef> + >(parameters as any) + + const { address, slot, query = {} } = _parameters + const options = getStorageAtQueryOptions(config, { + ..._parameters, + chainId: _parameters.chainId ?? chainId.value, + }) + const enabled = Boolean(address && slot && (query.enabled ?? true)) + + return { + ...query, + ...options, + enabled, + } + }) + + return useQuery(queryOptions as any) as UseStorageAtReturnType +} diff --git a/packages/vue/src/hooks/useTransactionReceipt.ts b/packages/vue/src/hooks/useTransactionReceipt.ts new file mode 100644 index 0000000..30a2df7 --- /dev/null +++ b/packages/vue/src/hooks/useTransactionReceipt.ts @@ -0,0 +1,88 @@ +'use client' + +import { + type Config, + type GetTransactionReceiptErrorType, + type ResolvedRegister, +} from '@wagmi/core' +import { type Evaluate } from '@wagmi/core/internal' +import { + type GetTransactionReceiptData, + type GetTransactionReceiptOptions, + type GetTransactionReceiptQueryKey, + getTransactionReceiptQueryOptions, +} from '@wagmi/core/query' +import { type GetTransactionReceiptQueryFnData } from '@wagmi/core/query' +import { computed } from 'vue-demi' +import { + type ConfigParameter, + type DeepUnwrapRef, + type MaybeRefDeep, + type QueryParameter, +} from '../types.js' +import { cloneDeepUnref } from '../utils/cloneDeepUnref.js' +import { type UseQueryReturnType, useQuery } from '../utils/query.js' +import { useChainId } from './useChainId.js' +import { useConfig } from './useConfig.js' + +export type UseTransactionReceiptParameters< + config extends Config = Config, + chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], + selectData = GetTransactionReceiptData, +> = MaybeRefDeep< + Evaluate< + GetTransactionReceiptOptions & + ConfigParameter & + QueryParameter< + GetTransactionReceiptQueryFnData, + GetTransactionReceiptErrorType, + selectData, + GetTransactionReceiptQueryKey + > + > +> + +export type UseTransactionReceiptReturnType< + config extends Config = Config, + chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], + selectData = GetTransactionReceiptData, +> = UseQueryReturnType + +/** https://wagmi.sh/react/api/hooks/useTransactionReceipt */ +export function useTransactionReceipt< + config extends Config = ResolvedRegister['config'], + chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], + selectData = GetTransactionReceiptData, +>( + parameters: UseTransactionReceiptParameters = {}, +): UseTransactionReceiptReturnType { + const config = useConfig(parameters) + const chainId = useChainId() + + const queryOptions = computed(() => { + const _parameters = cloneDeepUnref< + DeepUnwrapRef< + UseTransactionReceiptParameters + > + >(parameters as any) + + const { hash, query = {} } = _parameters + const options = getTransactionReceiptQueryOptions(config, { + ..._parameters, + chainId: _parameters.chainId ?? chainId.value, + }) + const enabled = Boolean(hash && (query.enabled ?? true)) + + return { + ...query, + ...options, + enabled, + } + }) + + return useQuery(queryOptions as any) as UseTransactionReceiptReturnType< + config, + chainId, + selectData + > +} diff --git a/packages/vue/src/hooks/useVerifyMessage.ts b/packages/vue/src/hooks/useVerifyMessage.ts index 4f55e58..cfb3f83 100644 --- a/packages/vue/src/hooks/useVerifyMessage.ts +++ b/packages/vue/src/hooks/useVerifyMessage.ts @@ -36,7 +36,7 @@ export type UseVerifyMessageParameters< VerifyMessageQueryFnData, VerifyMessageErrorType, selectData, - VerifyMessageQueryKey + VerifyMessageQueryKey > > > diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 948b3be..3298593 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,11 +76,11 @@ importers: packages/vue: dependencies: '@wagmi/connectors': - specifier: 4.1.2 - version: 4.1.2(@wagmi/core@2.1.2)(typescript@5.1.6)(viem@2.0.0-beta.15) + specifier: 4.1.4 + version: 4.1.4(@wagmi/core@2.2.1)(typescript@5.1.6)(viem@2.0.0-beta.15) '@wagmi/core': - specifier: 2.1.2 - version: 2.1.2(typescript@5.1.6)(viem@2.0.0-beta.15) + specifier: 2.2.1 + version: 2.2.1(typescript@5.1.6)(viem@2.0.0-beta.15) vue: specifier: 3.3.8 version: 3.3.8(typescript@5.1.6) @@ -2878,10 +2878,10 @@ packages: resolution: {integrity: sha512-O16vewA05D0IwfG2N/OFEuVeb17pieaI32mmYXp36V8lp+/pI1YV04rRL9Eyjndj3xQO5SNjAxTh6ul4IlBa3A==} dev: true - /@wagmi/connectors@4.1.2(@wagmi/core@2.1.2)(typescript@5.1.6)(viem@2.0.0-beta.15): - resolution: {integrity: sha512-fSTSZaGBmbwUjpEvhojE+UVFGuR8Cg0luUp2bVPAVoKngzrnYxC+53IKuNFzhieI6rtAaAkjmWQQ6JAv7H0KKA==} + /@wagmi/connectors@4.1.4(@wagmi/core@2.2.1)(typescript@5.1.6)(viem@2.0.0-beta.15): + resolution: {integrity: sha512-Mk/JnVs9pPd9cN/b5F+kHZMRU13yVf1zJwXNzSKpt7BOJQBqiFxJtmuZdRsNboEGEiPDFoEnzOzeAFi2xk3UGw==} peerDependencies: - '@wagmi/core': 2.1.2 + '@wagmi/core': 2.2.1 typescript: '>=5.0.4' viem: 2.x peerDependenciesMeta: @@ -2892,7 +2892,7 @@ packages: '@metamask/sdk': 0.14.1 '@safe-global/safe-apps-provider': 0.18.1(typescript@5.1.6) '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.1.6) - '@wagmi/core': 2.1.2(typescript@5.1.6)(viem@2.0.0-beta.15) + '@wagmi/core': 2.2.1(typescript@5.1.6)(viem@2.0.0-beta.15) '@walletconnect/ethereum-provider': 2.11.0 '@walletconnect/modal': 2.6.2 typescript: 5.1.6 @@ -2922,8 +2922,8 @@ packages: - zod dev: false - /@wagmi/core@2.1.2(typescript@5.1.6)(viem@2.0.0-beta.15): - resolution: {integrity: sha512-Rv7gc0pILlrNGpFDuPElIOrTaHPDxrbZoZivl3CNndCOXNUqaxgfbEVt7qFsILF+kmnDGmu7/0qJ7YhZZhyHpg==} + /@wagmi/core@2.2.1(typescript@5.1.6)(viem@2.0.0-beta.15): + resolution: {integrity: sha512-eoTHG600lFpQyeofuo1nlAuTlI7rjduJK/yU4F8sLwjucROSE5RmD2OpQOkeEC3JGoXjrYxVPbY77PUD6ajzqw==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4'