import { AnyPrimitiveType, AnyResolvableType, Resolver, TypeResolver } from './TypeResolver'; type TypeResolverFunction

= Resolver< R['__shape__'], P['__shape__'] >; export class TypeResolverBuilder { private primitives = new Set(); private resolvables = new Set(); private resolverMap: Record>> = {}; static new() { return new TypeResolverBuilder(); } addPrimitive

(primitive: P) { this.primitives.add(primitive); return this; } addResolver

( primitive: P, resolvable: R, resolver: TypeResolverFunction, ) { this.primitives.add(primitive); this.resolvables.add(resolvable); this.resolverMap[primitive.title] ??= {}; this.resolverMap[primitive.title][resolvable.title] = resolver as TypeResolverFunction< AnyPrimitiveType, AnyResolvableType >; return this; } build() { return new TypeResolver( Array.from(this.primitives.values()), Array.from(this.resolvables.values()), this.resolverMap, ); } }