ts-json-schema-generator
Version:
Generate JSON schema from your Typescript sources
47 lines • 1.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepMerge = void 0;
const intersectionOfArrays_js_1 = require("./intersectionOfArrays.js");
function deepMerge(a, b) {
const output = { ...structuredClone(a), ...structuredClone(b) };
for (const key in a) {
if (b.hasOwnProperty(key)) {
const elementA = a[key];
const elementB = b[key];
if (elementA != null &&
elementB != null &&
typeof elementA === "object" &&
typeof elementB === "object" &&
"type" in elementA &&
"type" in elementB) {
if (elementA.type == elementB.type) {
const enums = mergeConstsAndEnums(elementA, elementB);
if (enums != null) {
const isSingle = enums.length === 1;
output[key][isSingle ? "const" : "enum"] = isSingle ? enums[0] : enums;
delete output[key][isSingle ? "enum" : "const"];
}
}
}
}
}
return output;
}
exports.deepMerge = deepMerge;
function mergeConstsAndEnums(a, b) {
const enumA = a.const !== undefined ? [a.const] : a.enum;
const enumB = b.const !== undefined ? [b.const] : b.enum;
if (enumA == null && enumB != null) {
return enumB;
}
else if (enumA != null && enumB == null) {
return enumA;
}
else if (enumA != null && enumB != null) {
return (0, intersectionOfArrays_js_1.intersectionOfArrays)(enumA, enumB);
}
else {
return undefined;
}
}
//# sourceMappingURL=deepMerge.js.map
;