import { Transcoder } from './types.mjs'; import '@stacks/transactions'; type MapEntryDescriptor = { mode: "mapEntry"; input: Transcoder; output: Transcoder; }; type VariableDescriptor = { mode: "variable"; input: Transcoder; output: Transcoder; }; type ReadonlyFunctionDescriptor = { mode: "readonly"; input: readonly { name: string; type: Transcoder; }[]; output: Transcoder; }; type OpenCallFunctionDescriptor = { mode: "public"; input: readonly { name: string; type: Transcoder; }[]; output: Transcoder; }; type ContractEntryDescriptor = MapEntryDescriptor | VariableDescriptor | ReadonlyFunctionDescriptor | OpenCallFunctionDescriptor; type ParametersOfDescriptor = D extends ContractEntryDescriptor ? D extends { input: infer Input; } ? Input extends readonly { name: string; type: Transcoder; }[] ? { [K in keyof Input]: Input[K] extends { type: Transcoder; } ? T : never; } : never : never : never; type ParameterObjOfDescriptorPickType = T extends { name: N; type: Transcoder; } ? R : never; type ParameterObjOfDescriptor = D extends ContractEntryDescriptor ? D extends { input: infer Input; } ? Input extends readonly { name: string; type: Transcoder; }[] ? { [K in Input[number]["name"]]: ParameterObjOfDescriptorPickType; } : Input extends Transcoder ? U : never : never : never; type ReturnTypeOfDescriptor = D extends ContractEntryDescriptor ? D extends { output: infer Output; } ? Output extends Transcoder ? T : never : never : never; type ContractBaseType = { [contracts: string]: { [func: string]: ContractEntryDescriptor; }; }; declare function defineContract(contracts: T): T; export { type ContractBaseType, type ContractEntryDescriptor, type MapEntryDescriptor, type OpenCallFunctionDescriptor, type ParameterObjOfDescriptor, type ParametersOfDescriptor, type ReadonlyFunctionDescriptor, type ReturnTypeOfDescriptor, type VariableDescriptor, defineContract };