concise
Version:
A tool belt for concise schemas
45 lines (36 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _timm = require("timm");
const mergeSchemas = (a, b) => {
let out = a; // Non-model specs are merged from `b`
out = (0, _timm.merge)(out, (0, _timm.omit)(b, ['models'])); // Merge models
let models = out.models;
Object.keys(b.models).forEach(modelName => {
let model = models[modelName];
const bModel = b.models[modelName]; // Models from b that didn't exist in a
if (!model) {
models = (0, _timm.set)(models, modelName, bModel);
return;
} // Preexisting models
const {
description,
includes,
fields,
relations
} = bModel;
model = (0, _timm.merge)(model, {
description,
includes: includes ? (0, _timm.merge)(model.includes || {}, includes) : undefined,
fields: fields ? (0, _timm.merge)(model.fields || {}, fields) : undefined,
relations: relations ? (0, _timm.merge)(model.relations || {}, relations) : undefined
});
models = (0, _timm.set)(models, modelName, model);
});
out = (0, _timm.set)(out, 'models', models);
return out;
};
var _default = mergeSchemas;
exports.default = _default;