@tsed/schema
Version:
JsonSchema module for Ts.ED Framework
47 lines (46 loc) • 1.24 kB
JavaScript
import { deepMerge, mergeReducerBuilder } from "@tsed/core";
/**
* @ignore
*/
export const schemesReducer = mergeReducerBuilder((current, value) => {
if (current.type && current.type && current.type === value.type && value.type === "array") {
return JSON.stringify(current.items) === JSON.stringify(value.items);
}
return (current.type && current.type === value.type) || (current.$ref && current.$ref === value.$ref);
});
/**
* @ignore
*/
export const parameters = mergeReducerBuilder((current, value) => current.in === value.in && current.name === value.name);
/**
* @ignore
*/
export const security = mergeReducerBuilder((current, value) => {
return !!Object.keys(value).find((key) => !!current[key]);
});
/**
* @ignore
*/
export const tagsReducer = mergeReducerBuilder((current, value) => current.name === value.name);
/**
* @ignore
*/
const SPEC_REDUCERS = {
security,
parameters,
oneOf: schemesReducer,
anyOf: schemesReducer,
allOf: schemesReducer,
tags: tagsReducer
};
/**
* Merge two spec
* @param spec
* @param input
*/
export function mergeSpec(spec, input) {
return deepMerge(spec, input, {
reducers: SPEC_REDUCERS,
cleanUndefinedProps: true
});
}