import { ResolvedConfig } from './config'; export type CairoFelt = 'core::felt252'; type MBits = 8 | 16 | 32; type BigMBits = 64 | 128; export type CairoInt = `${'core::integer::u'}${MBits}`; export type CairoBigInt = `${'core::integer::u'}${BigMBits}`; export type CairoU256 = 'core::integer::u256'; export type CairoU512 = 'core::integer::u512'; export type CairoContractAddress = 'core::starknet::contract_address::ContractAddress'; export type CairoEthAddress = 'core::starknet::eth_address::EthAddress'; export type CairoClassHash = 'core::starknet::class_hash::ClassHash'; export type CairoFunction = 'function'; export type CairoVoid = '()'; export type CairoBool = 'core::bool'; export type CairoBytes31 = 'core::bytes_31::bytes31'; export type CairoByteArray = 'core::byte_array::ByteArray'; export type CairoSecp256k1Point = 'core::starknet::secp256k1::Secp256k1Point'; type MAX_TUPLE_SIZE = 20; type _BuildTuple = D['length'] extends MAX_TUPLE_SIZE ? `${A})` | R : A extends '' ? _BuildTuple : _BuildTuple<`${A})` | R, `${A}, ${string}`, [...D, 1]>; export type CairoTuple = _BuildTuple; type AbiType = CairoFelt | CairoFunction | CairoInt | CairoBigInt | CairoU256 | CairoU512 | CairoContractAddress | CairoEthAddress | CairoClassHash | CairoBool | CairoVoid | CairoBytes31 | CairoByteArray | CairoSecp256k1Point; type CairoOptionGeneric = `core::option::Option::<${T}>`; type CairoArrayGeneric = `core::array::Array::<${T}>` | `core::array::Span::<${T}>`; type CairoResultGeneric = `core::result::Result::<${T}, ${E}>`; type CairoGeneric = CairoOptionGeneric | CairoArrayGeneric | CairoResultGeneric; export type Option = ResolvedConfig['Option']; export type Tuple = ResolvedConfig['Tuple']; export type Result = ResolvedConfig['Result']; export type Enum = ResolvedConfig['Enum']; export type Calldata = ResolvedConfig['Calldata']; export type InvokeOptions = ResolvedConfig['InvokeOptions']; export type CallOptions = ResolvedConfig['CallOptions']; export type InvokeFunctionResponse = ResolvedConfig['InvokeFunctionResponse']; export type Call = ResolvedConfig['Call']; type AbiParameter = { name: string; type: string; }; type AbiOutput = { type: string; }; type AbiStateMutability = 'view' | 'external'; type AbiImpl = { type: 'impl'; name: string; interface_name: string; }; type AbiInterface = { type: 'interface'; name: string; items: readonly AbiFunction[]; }; type AbiConstructor = { type: 'constructor'; name: 'constructor'; inputs: readonly AbiParameter[]; }; type AbiFunction = { type: 'function'; name: string; inputs: readonly AbiParameter[]; outputs: readonly AbiOutput[]; state_mutability: AbiStateMutability; }; type AbiEventKind = 'nested' | 'data' | 'key' | 'flat'; export type AbiEventMember = { name: string; type: string; kind: AbiEventKind; }; type AbiEventStruct = { type: 'event'; name: string; kind: 'struct'; members: readonly AbiEventMember[]; }; type AbiEventEnum = { type: 'event'; name: string; kind: 'enum'; variants: readonly AbiEventMember[]; }; type AbiEvent = AbiEventStruct | AbiEventEnum; type AbiMember = { name: string; type: string; }; type AbiStruct = { type: 'struct'; name: string; members: readonly AbiMember[]; }; type AbiEnum = { type: 'enum'; name: string; variants: readonly AbiParameter[]; }; export type Abi = readonly (AbiImpl | AbiInterface | AbiConstructor | AbiFunction | AbiStruct | AbiEnum | AbiEvent)[]; type _BuildArgs = R['length'] extends TAbiParam['length'] ? R : _BuildArgs ]>; export type FunctionArgs> = ExtractAbiFunction['inputs'] extends readonly [] ? [] : _BuildArgs['inputs'], [ ]> extends [infer T] ? T : _BuildArgs['inputs'], []>; export type FunctionRet> = ExtractAbiFunction['outputs'] extends readonly [] ? void : StringToPrimitiveType['outputs'][0]['type']>; export type ExtractAbiImpls = Extract; export type ExtractAbiInterfaces = Extract; export type ExtractAbiFunctions = Extract['items'][number], { type: 'function'; }> | Extract; export type ExtractAbiFunctionNames = ExtractAbiFunctions['name']; export type ExtractAbiFunction> = Extract, { name: TFunctionName; }>; export type ExtractAbiStructs = Extract; export type ExtractAbiStructNames = ExtractAbiStructs['name']; export type ExtractAbiStruct> = Extract, { name: TStructName; }>; export type ExtractAbiEnums = Extract; export type ExtractAbiEnumNames = ExtractAbiEnums['name']; export type ExtractAbiEnum> = Extract, { name: TEnumName; }>; export type ExtractAbiEvents = Extract; export type ExtractAbiEventNames = ExtractAbiEvents['name']; export type ExtractAbiEvent> = Extract, { name: TEventName; }>; type PrimitiveTypeLookup = { [_ in CairoFelt]: ResolvedConfig['FeltType']; } & { [_ in CairoFunction]: number; } & { [_ in CairoInt]: ResolvedConfig['IntType']; } & { [_ in CairoU256]: ResolvedConfig['U256Type']; } & { [_ in CairoU512]: ResolvedConfig['U512Type']; } & { [_ in CairoBigInt]: ResolvedConfig['BigIntType']; } & { [_ in CairoContractAddress]: ResolvedConfig['AddressType']; } & { [_ in CairoEthAddress]: ResolvedConfig['AddressType']; } & { [_ in CairoClassHash]: ResolvedConfig['ClassHashType']; } & { [_ in CairoVoid]: void; } & { [_ in CairoBool]: boolean; } & { [_ in CairoBytes31]: ResolvedConfig['Bytes31Type']; } & { [_ in CairoByteArray]: ResolvedConfig['ByteArray']; } & { [_ in CairoSecp256k1Point]: ResolvedConfig['Secp256k1PointType']; }; export type AbiTypeToPrimitiveType = PrimitiveTypeLookup[TAbiType]; export type GenericTypeToPrimitiveType = G extends CairoOptionGeneric ? T extends AbiType ? Option> : Option> : G extends CairoArrayGeneric ? T extends AbiType ? AbiTypeToPrimitiveType[] : StringToPrimitiveType[] : G extends CairoResultGeneric ? T extends AbiType ? E extends AbiType ? Result, AbiTypeToPrimitiveType> : Result, StringToPrimitiveType> : Result, StringToPrimitiveType> : unknown; export type CairoTupleToPrimitive = T extends `(${infer first}, ${infer remaining})` ? [ StringToPrimitiveType, ...CairoTupleToPrimitive ] : T extends `(${infer first})` ? [StringToPrimitiveType] : [unknown]; type ObjectToUnion> = { [K in keyof T]: { [Key in K]: T[K]; }; }[keyof T]; export type EventToPrimitiveType> = ExtractAbiEvent extends { type: 'event'; kind: 'struct'; members: infer TMembers extends readonly AbiEventMember[]; } ? { [Member in TMembers[number] as Member['name']]: StringToPrimitiveType; } : ExtractAbiEvent extends { type: 'event'; kind: 'enum'; variants: infer TVariants extends readonly AbiEventMember[]; } ? ObjectToUnion<{ [Variant in TVariants[number] as Variant['name']]: StringToPrimitiveType; }> : never; export type StringToPrimitiveTypeS = ExtractAbiEnum; export type StringToPrimitiveType = T extends AbiType ? AbiTypeToPrimitiveType : T extends CairoGeneric ? GenericTypeToPrimitiveType : T extends CairoTuple ? Tuple extends never ? CairoTupleToPrimitive : Tuple : ExtractAbiStruct extends never ? ExtractAbiEnum extends never ? unknown : Enum extends never ? ExtractAbiEnum extends { type: 'enum'; variants: infer TVariants extends readonly AbiParameter[]; } ? ObjectToUnion<{ [Variant in TVariants[number] as Variant['name']]: StringToPrimitiveType; }> : never : Enum : ExtractAbiStruct extends { type: 'struct'; members: infer TMembers extends readonly AbiMember[]; } ? { [Member in TMembers[number] as Member['name']]: StringToPrimitiveType; } : never; export type FunctionCallWithCallData = (calldata: Calldata) => TAbiFunction['state_mutability'] extends 'view' ? Promise> : InvokeFunctionResponse; export type ExtractArgs = TAbiFunction['inputs'] extends infer TInput extends readonly AbiParameter[] ? { [K3 in keyof TInput]: TInput[K3] extends infer TInputParam extends AbiParameter ? StringToPrimitiveType : never; } : never; export type FunctionCallWithArgs = (...args: ExtractArgs) => TAbiFunction['state_mutability'] extends 'view' ? Promise> : InvokeFunctionResponse; export type FunctionCallWithOptions = TAbiFunction['state_mutability'] extends 'view' ? (...args: [...ExtractArgs, CallOptions]) => Promise> : (...args: [...ExtractArgs, InvokeOptions]) => InvokeFunctionResponse; export type FunctionCall = FunctionCallWithArgs & FunctionCallWithCallData & FunctionCallWithOptions; export type ContractFunctions = { [K in ExtractAbiFunctionNames]: FunctionCall>; }; export type FunctionPopulateTransaction = (...args: [...ExtractArgs]) => Call; export type ContractFunctionsPopulateTransaction = { [K in ExtractAbiFunctionNames]: FunctionPopulateTransaction>; }; export {}; //# sourceMappingURL=kanabi.d.ts.map