import type { Abi, AbiEvent, AbiFunction, AbiParameter, AbiParameterToPrimitiveType, AbiParametersToPrimitiveTypes, AbiStateMutability, Address, ExtractAbiError, ExtractAbiErrorNames, ExtractAbiEvent, ExtractAbiEventNames, ExtractAbiFunction, ExtractAbiFunctionNames, ResolvedRegister } from 'abitype'; import type { Hex, LogTopic } from './misc.js'; import type { TransactionRequest } from './transaction.js'; import type { Filter, IsNarrowable, IsUnion, MaybeRequired, NoInfer, Prettify, UnionToTuple } from './utils.js'; export type ContractFunctionName = ExtractAbiFunctionNames extends infer functionName extends string ? [functionName] extends [never] ? string : functionName : string; export type ContractErrorName = ExtractAbiErrorNames extends infer errorName extends string ? [errorName] extends [never] ? string : errorName : string; export type ContractEventName = ExtractAbiEventNames extends infer eventName extends string ? [eventName] extends [never] ? string : eventName : string; export type ContractFunctionArgs = ContractFunctionName> = AbiParametersToPrimitiveTypes['inputs'], 'inputs'> extends infer args ? [args] extends [never] ? readonly unknown[] : args : readonly unknown[]; export type ContractConstructorArgs = AbiParametersToPrimitiveTypes['inputs'], 'inputs'> extends infer args ? [args] extends [never] ? readonly unknown[] : args : readonly unknown[]; export type ContractErrorArgs = ContractErrorName> = AbiParametersToPrimitiveTypes['inputs'], 'inputs'> extends infer args ? [args] extends [never] ? readonly unknown[] : args : readonly unknown[]; export type ContractEventArgs = ContractEventName> = AbiEventParametersToPrimitiveTypes['inputs']> extends infer args ? [args] extends [never] ? readonly unknown[] | Record : args : readonly unknown[] | Record; export type ContractEventArgsFromTopics = ContractEventName, strict extends boolean = true> = AbiEventParametersToPrimitiveTypes['inputs'], { EnableUnion: false; IndexedOnly: false; Required: strict; }> extends infer args ? [args] extends [never] ? readonly unknown[] | Record : args : readonly unknown[] | Record; export type Widen = ([unknown] extends [type] ? unknown : never) | (type extends Function ? type : never) | (type extends ResolvedRegister['BigIntType'] ? bigint : never) | (type extends boolean ? boolean : never) | (type extends ResolvedRegister['IntType'] ? number : never) | (type extends string ? type extends ResolvedRegister['AddressType'] ? ResolvedRegister['AddressType'] : type extends ResolvedRegister['BytesType']['inputs'] ? ResolvedRegister['BytesType'] : string : never) | (type extends readonly [] ? readonly [] : never) | (type extends Record ? { [K in keyof type]: Widen; } : never) | (type extends { length: number; } ? { [K in keyof type]: Widen; } extends infer Val extends readonly unknown[] ? readonly [...Val] : never : never); export type UnionWiden = type extends any ? Widen : never; export type ExtractAbiFunctionForArgs, args extends ContractFunctionArgs> = ExtractAbiFunction extends infer abiFunction extends AbiFunction ? IsUnion extends true ? UnionToTuple extends infer abiFunctions extends readonly AbiFunction[] ? { [k in keyof abiFunctions]: CheckArgs; }[number] : never : abiFunction : never; type CheckArgs = AbiParametersToPrimitiveTypes> = (readonly [] extends args ? readonly [] : args) extends targetArgs ? abiFunction : never; export type ContractFunctionParameters = ContractFunctionName, args extends ContractFunctionArgs = ContractFunctionArgs, deployless extends boolean = false, allFunctionNames = ContractFunctionName, allArgs = ContractFunctionArgs> = { abi: abi; functionName: allFunctionNames | (functionName extends allFunctionNames ? functionName : never); args?: (abi extends Abi ? UnionWiden : never) | allArgs | undefined; } & (readonly [] extends allArgs ? {} : { args: Widen; }) & (deployless extends true ? { address?: undefined; code: Hex; } : { address: Address; }); export type ContractFunctionReturnType = ContractFunctionName, args extends ContractFunctionArgs = ContractFunctionArgs> = abi extends Abi ? Abi extends abi ? unknown : AbiParametersToPrimitiveTypes['outputs']> extends infer types ? types extends readonly [] ? void : types extends readonly [infer type] ? type : types : never : unknown; export type AbiItem = Abi[number]; export type ExtractAbiItemNames = Extract['name']; export type ExtractAbiItem> = Extract; export type AbiItemName = abi extends Abi ? ExtractAbiItemNames : string; export type AbiItemArgs = AbiItemName> = AbiParametersToPrimitiveTypes['inputs'], 'inputs'> extends infer args ? [args] extends [never] ? readonly unknown[] : args : readonly unknown[]; export type ExtractAbiItemForArgs, args extends AbiItemArgs> = ExtractAbiItem extends infer abiItem extends AbiItem & { inputs: readonly AbiParameter[]; } ? IsUnion extends true ? UnionToTuple extends infer abiItems extends readonly (AbiItem & { inputs: readonly AbiParameter[]; })[] ? { [k in keyof abiItems]: (readonly [] extends args ? readonly [] : args) extends AbiParametersToPrimitiveTypes ? abiItems[k] : never; }[number] : never : abiItem : never; export type EventDefinition = `${string}(${string})`; export type GetValue : AbiFunction, _Narrowable extends boolean = IsNarrowable> = _Narrowable extends true ? abiFunction['stateMutability'] extends 'payable' ? { value?: NoInfer | undefined; } : abiFunction['payable'] extends true ? { value?: NoInfer | undefined; } : { value?: undefined; } : { value?: NoInfer | undefined; }; export type MaybeAbiEventName = abiEvent extends AbiEvent ? abiEvent['name'] : undefined; export type MaybeExtractEventArgsFromAbi = abi extends Abi | readonly unknown[] ? eventName extends string ? GetEventArgs : undefined : undefined; export type GetEventArgs : AbiEvent & { type: 'event'; }, args = AbiEventParametersToPrimitiveTypes, FailedToParseArgs = ([args] extends [never] ? true : false) | (readonly unknown[] extends args ? true : false)> = true extends FailedToParseArgs ? readonly unknown[] | Record : args; type EventParameterOptions = { EnableUnion?: boolean; IndexedOnly?: boolean; Required?: boolean; }; type DefaultEventParameterOptions = { EnableUnion: true; IndexedOnly: true; Required: false; }; export type AbiEventParametersToPrimitiveTypes = abiParameters extends readonly [] ? readonly [] : Filter extends infer Filtered extends readonly AbiParameter[] ? _HasUnnamedAbiParameter extends true ? readonly [ ...{ [K in keyof Filtered]: AbiEventParameterToPrimitiveType; } ] | (_options['Required'] extends true ? never : Filtered extends readonly [ ...infer Head extends readonly AbiParameter[], infer _ ] ? AbiEventParametersToPrimitiveTypes; }], _options> : never) : { [Parameter in Filtered[number] as Parameter extends { name: infer Name extends string; } ? Name : never]?: AbiEventParameterToPrimitiveType | undefined; } extends infer Mapped ? Prettify> : never : never; type _HasUnnamedAbiParameter = abiParameters extends readonly [ infer Head extends AbiParameter, ...infer Tail extends readonly AbiParameter[] ] ? Head extends { name: string; } ? Head['name'] extends '' ? true : _HasUnnamedAbiParameter : true : false; /** * @internal */ export type LogTopicType = topic extends Hex ? primitiveType : topic extends Hex[] ? primitiveType[] : topic extends null ? null : never; /** * @internal */ export type AbiEventParameterToPrimitiveType> = _options['EnableUnion'] extends true ? LogTopicType<_type> : _type; type HashedEventTypes = 'bytes' | 'string' | 'tuple' | `${string}[${string}]`; /** * @internal */ export type AbiEventTopicToPrimitiveType> = LogTopicType; export {}; //# sourceMappingURL=contract.d.ts.map