UNPKG

@tsed/schema

Version:
34 lines (33 loc) 968 B
import { cleanObject } from "@tsed/core"; export class Discriminator { constructor({ base, propertyName, types, values } = {}) { this.values = new Map(); this.types = new Map(); Object.assign(this, cleanObject({ base, propertyName, types: types ? new Map(types) : undefined, values: values ? new Map(values) : undefined })); } add(type, values) { values.forEach((value) => { this.values.set(value, type); }); this.types.set(type, values); return this; } getType(discriminatorValue) { return this.values.get(discriminatorValue) || this.base; } getValues(type) { return this.types.get(type); } getDefaultValue(type) { const values = this.types.get(type); return values ? values[0] : undefined; } children() { return [...new Set([...this.types.keys()])]; } }