@tsed/schema
Version:
JsonSchema module for Ts.ED Framework
32 lines (31 loc) • 1.07 kB
JavaScript
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);