15 lines
564 B
TypeScript
15 lines
564 B
TypeScript
import { GlobalRegistry, Registry } from '../registry'
|
|
import { Constructor } from '../utils'
|
|
import { ProxyDeserializer } from './generic'
|
|
import { IDeserializer } from './interface'
|
|
|
|
export function deserialize<T, D extends IDeserializer>(deserializer: D, into: Constructor<T>, 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))
|
|
}
|
|
}
|
|
|