UNPKG

@tsed/schema

Version:
37 lines (27 loc) 1.19 kB
import {isString} from "@tsed/core"; import {JsonSchema} from "../../domain/JsonSchema.js"; import {SpecTypes} from "../../domain/SpecTypes.js"; import type {JsonSchemaOptions} from "../../interfaces/JsonSchemaOptions.js"; import {registerJsonSchemaMapper} from "../../registries/JsonSchemaMapperContainer.js"; import {toRef} from "../../utils/ref.js"; interface SchemaWithDiscriminator { discriminator?: {mapping?: Record<string, JsonSchema | string>}; } export function discriminatorMappingMapper(obj: SchemaWithDiscriminator, _: JsonSchema, options: JsonSchemaOptions) { if (obj.discriminator?.mapping) { const entries = Object.entries(obj.discriminator.mapping); const newMapping: Record<string, string> = {}; for (const [key, value] of entries) { newMapping[key] = isString(value) ? value : toRef(value, null, options).$ref; } obj.discriminator.mapping = newMapping; } return obj; } function defaultDiscriminatorMappingMapper(obj: SchemaWithDiscriminator) { if (obj.discriminator?.mapping) { delete obj.discriminator.mapping; } return obj; } registerJsonSchemaMapper("discriminatorMapping", defaultDiscriminatorMappingMapper);