import { GlobalRegistry, Registry } from '../registry' import { Constructor } from '../utils' import { ProxyDeserializer } from './generic' import { IDeserializer } from './interface' export function deserialize(deserializer: D, into: Constructor, registry: Registry = GlobalRegistry): T { const de = registry.deserializers.get(into) if (de == null) { throw new ReferenceError(`No deserializer for ${into.name}`) } else { return de(new ProxyDeserializer(deserializer, (into as any)?.[Symbol.metadata]?.serde)) } }