UNPKG

@tsed/schema

Version:
32 lines (31 loc) 1.07 kB
import { classOf, deepMerge } from "@tsed/core"; import { execMapper, registerJsonSchemaMapper } from "../../registries/JsonSchemaMapperContainer.js"; import { getInheritedStores } from "../../utils/getInheritedStores.js"; function alterMerge(_, obj) { if (obj?.type && obj?.$ref) { const { $ref, ...schema } = obj; obj = { allOf: [ { $ref }, schema ] }; } return obj; } /** * @ignore */ export function inheritedClassMapper(obj, { target, ...options }) { const stores = Array.from(getInheritedStores(target).entries()).filter(([model]) => classOf(model) !== classOf(target)); if (stores.length) { const schema = stores.reduce((obj, [, store]) => { return deepMerge(obj, execMapper("schema", [store.schema], options), { alter: alterMerge }); }, {}); return deepMerge(schema, obj, { alter: alterMerge }); } return obj; } registerJsonSchemaMapper("inheritedClass", inheritedClassMapper);