import type { Abi, ExtractAbiFunctionNames } from 'abitype'; import type { ContractFunctionConfig, ContractFunctionResult } from './contract.js'; type MAXIMUM_DEPTH = 20; export type MulticallContract = string> = { abi: TAbi; functionName: TFunctionName; }; export type MulticallContracts = object, Result extends any[] = [], Depth extends readonly number[] = []> = Depth['length'] extends MAXIMUM_DEPTH ? (ContractFunctionConfig & TProperties)[] : TContracts extends [] ? [] : TContracts extends [infer Head extends MulticallContract] ? [ ...Result, ContractFunctionConfig & TProperties ] : TContracts extends [ infer Head extends MulticallContract, ...infer Tail extends readonly MulticallContract[] ] ? MulticallContracts<[ ...Tail ], TProperties, [ ...Result, ContractFunctionConfig & TProperties ], [ ...Depth, 1 ]> : unknown[] extends TContracts ? TContracts : TContracts extends ContractFunctionConfig[] ? (ContractFunctionConfig & TProperties)[] : (ContractFunctionConfig & TProperties)[]; export type MulticallResult = TAllowFailure extends true ? { error?: undefined; result: Result; status: 'success'; } | { error: Error; result?: undefined; status: 'failure'; } : Result; export type MulticallResults = Depth['length'] extends MAXIMUM_DEPTH ? MulticallResult[] : TContracts extends [] ? [] : TContracts extends [infer Head extends MulticallContract] ? [ ...Result, MulticallResult, TAllowFailure> ] : TContracts extends [ infer Head extends MulticallContract, ...infer Tail extends readonly MulticallContract[] ] ? MulticallResults<[ ...Tail ], TAllowFailure, [ ...Result, MulticallResult, TAllowFailure> ], [ ...Depth, 1 ]> : TContracts extends ContractFunctionConfig[] ? MulticallResult, TAllowFailure>[] : MulticallResult[]; export {}; //# sourceMappingURL=multicall.d.ts.map