import { GenericHashInput, GenericProvable, GenericProvableExtended } from './generic.js'; export { createProvable, createHashInput, ProvableConstructor }; type ProvableConstructor = (typeObj: A, options?: { customObjectKeys?: string[]; isPure?: boolean; }) => GenericProvableExtended, InferJson, Field>; declare function createProvable(): ProvableConstructor; declare function createHashInput(): { readonly empty: {}; append(input1: GenericHashInput, input2: GenericHashInput): GenericHashInput; }; type JSONValue = number | string | boolean | null | Array | { [key: string]: JSONValue; }; type Constructor = new (...args: any) => T; type Tuple = [T, ...T[]] | []; type Primitive = typeof String | typeof Number | typeof Boolean | typeof BigInt | null | undefined; type InferPrimitive

= P extends typeof String ? string : P extends typeof Number ? number : P extends typeof Boolean ? boolean : P extends typeof BigInt ? bigint : P extends null ? null : P extends undefined ? undefined : any; type InferPrimitiveJson

= P extends typeof String ? string : P extends typeof Number ? number : P extends typeof Boolean ? boolean : P extends typeof BigInt ? string : P extends null ? null : P extends undefined ? null : JSONValue; type InferProvable = A extends Constructor ? A extends GenericProvable ? U : InferProvableBase : InferProvableBase; type InferProvableBase = A extends GenericProvable ? U : A extends Primitive ? InferPrimitive : A extends Tuple ? { [I in keyof A]: InferProvable; } : A extends (infer U)[] ? InferProvable[] : A extends Record ? { [K in keyof A]: InferProvable; } : never; type WithJson = { toJSON: (x: any) => J; }; type InferJson = A extends WithJson ? J : A extends Primitive ? InferPrimitiveJson : A extends Tuple ? { [I in keyof A]: InferJson; } : A extends WithJson[] ? U[] : A extends Record ? { [K in keyof A]: InferJson; } : JSONValue;