31 lines
845 B
TypeScript
31 lines
845 B
TypeScript
![]() |
import { JsonSchema } from "./types";
|
||
|
import { mergeArraysUnique } from "./utils/merge";
|
||
|
import getTypeOf from "./getTypeOf";
|
||
|
|
||
|
/**
|
||
|
* merges to two json schema. In case of conflicts, will use overwrite first
|
||
|
* schema or directly return first json schema.
|
||
|
*/
|
||
|
export function mergeSchema(a: JsonSchema, b: JsonSchema) {
|
||
|
const aType = getTypeOf(a);
|
||
|
const bType = getTypeOf(b);
|
||
|
if (aType !== bType) {
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
const result = mergeArraysUnique(a, b);
|
||
|
if (a.getOneOfOrigin) {
|
||
|
Object.defineProperty(result, "getOneOfOrigin", {
|
||
|
enumerable: false,
|
||
|
value: a.getOneOfOrigin
|
||
|
});
|
||
|
} else if (b.getOneOfOrigin) {
|
||
|
Object.defineProperty(result, "getOneOfOrigin", {
|
||
|
enumerable: false,
|
||
|
value: b.getOneOfOrigin
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|