import type { ProvableType } from 'o1js'; import type { z } from 'zod'; import type { Constructor } from './types.ts'; export { ProvableFactory, type SerializedFactory }; type ProvableConstructor = Constructor & ProvableType; /** * Standard interface for polymorphic provable type that can be serialized. */ type ProvableFactory = ((...args: any) => ProvableConstructor) & { name: N; Base: Constructor; }; type Serializer = { typeSchema: z.ZodType; valueSchema: z.ZodType; typeToJSON(constructor: A): S; typeFromJSON(json: S): A; valueToJSON(type: A, value: InstanceType): V; valueFromJSON(type: A, json: V): InstanceType; }; type SerializedFactory = { _type: string; _isFactory: true; } & Serialized; type Serialized = Record; type MapValue = { base: Constructor; } & Serializer; declare const ProvableFactory: { register(name: string, factory: A, serialize: Serializer, S, V>): void; getRegistered(value: unknown): [string, MapValue] | undefined; tryToJSON(constructor: unknown): SerializedFactory | undefined; tryValueToJSON(value: unknown): (SerializedFactory & { value: any; }) | undefined; isSerialized(json: unknown): json is SerializedFactory; fromJSON(json: unknown): Constructor & ProvableType; valueFromJSON(json: unknown): any; };