viem
Version:
60 lines • 4.43 kB
TypeScript
import type { Abi, AbiStateMutability } from 'abitype';
import type { ContractFunctionArgs, ContractFunctionName, ContractFunctionParameters, ContractFunctionReturnType } from './contract.js';
import type { MaybePartial, Prettify } from './utils.js';
export type MulticallContracts<contracts extends readonly unknown[], options extends {
mutability: AbiStateMutability;
optional?: boolean;
properties?: Record<string, any>;
} = {
mutability: AbiStateMutability;
}, result extends readonly any[] = []> = contracts extends readonly [] ? readonly [] : contracts extends readonly [infer contract] ? readonly [
...result,
MaybePartial<Prettify<GetMulticallContractParameters<contract, options['mutability']> & options['properties']>, options['optional']>
] : contracts extends readonly [infer contract, ...infer rest] ? MulticallContracts<[
...rest
], options, [
...result,
MaybePartial<Prettify<GetMulticallContractParameters<contract, options['mutability']> & options['properties']>, options['optional']>
]> : readonly unknown[] extends contracts ? contracts : contracts extends readonly (infer contract extends ContractFunctionParameters)[] ? readonly MaybePartial<Prettify<contract & options['properties']>, options['optional']>[] : readonly MaybePartial<Prettify<ContractFunctionParameters & options['properties']>, options['optional']>[];
export type MulticallResults<contracts extends readonly unknown[] = readonly ContractFunctionParameters[], allowFailure extends boolean = true, options extends {
error?: Error | undefined;
extraProperties?: Record<string, unknown> | undefined;
mutability: AbiStateMutability;
} = {
error: Error;
extraProperties: {};
mutability: AbiStateMutability;
}, result extends any[] = []> = contracts extends readonly [] ? readonly [] : contracts extends readonly [infer contract] ? [
...result,
MulticallResponse<GetMulticallContractReturnType<contract, options['mutability']>, options['error'], allowFailure, options['extraProperties']>
] : contracts extends readonly [infer contract, ...infer rest] ? MulticallResults<[
...rest
], allowFailure, options, [
...result,
MulticallResponse<GetMulticallContractReturnType<contract, options['mutability']>, options['error'], allowFailure, options['extraProperties']>
]> : readonly unknown[] extends contracts ? MulticallResponse<unknown, options['error'], allowFailure, options['extraProperties']>[] : contracts extends readonly (infer contract extends ContractFunctionParameters)[] ? MulticallResponse<GetMulticallContractReturnType<contract, options['mutability']>, options['error'], allowFailure, options['extraProperties']>[] : MulticallResponse<unknown, options['error'], allowFailure, options['extraProperties']>[];
export type MulticallResponse<result = unknown, error = unknown, allowFailure extends boolean = true, extraProperties extends Record<string, unknown> | undefined = {}> = allowFailure extends true ? (extraProperties & {
error?: undefined;
result: result;
status: 'success';
}) | (extraProperties & {
error: unknown extends error ? Error : error;
result?: undefined;
status: 'failure';
}) : result;
export type GetMulticallContractParameters<contract, mutability extends AbiStateMutability> = contract extends {
abi: infer abi extends Abi;
} ? contract extends {
functionName: infer functionName extends ContractFunctionName<abi, mutability>;
} ? contract extends {
args: infer args extends ContractFunctionArgs<abi, mutability, functionName>;
} ? ContractFunctionParameters<abi, mutability, functionName, args> : ContractFunctionParameters<abi, mutability, functionName> : Abi extends abi ? ContractFunctionParameters : ContractFunctionParameters<abi, mutability> : ContractFunctionParameters<readonly unknown[]>;
type GetMulticallContractReturnType<contract, mutability extends AbiStateMutability> = contract extends {
abi: infer abi extends Abi;
} ? contract extends {
functionName: infer functionName extends ContractFunctionName<abi, mutability>;
} ? contract extends {
args: infer args extends ContractFunctionArgs<abi, mutability, functionName>;
} ? ContractFunctionReturnType<abi, mutability, functionName, args> : ContractFunctionReturnType<abi, mutability, functionName> : ContractFunctionReturnType<abi, mutability> : ContractFunctionReturnType;
export {};
//# sourceMappingURL=multicall.d.ts.map