integreat
Version:
Node.js integration layer
46 lines • 1.67 kB
JavaScript
import { isObject } from './is.js';
const arrOrEmptyArr = (arr) => (Array.isArray(arr) ? arr : []);
const mergeArrays = (arr1, arr2) => [
...arrOrEmptyArr(arr1),
...arrOrEmptyArr(arr2),
];
const isFlagSet = (flags, flag) => Boolean(flag && flags[flag]);
const resolveFlagAlias = (key) => key === 'breakByDefault' ? 'failOnErrorInPostconditions' : key;
const mergeFlags = (defs, def) => def
? {
...defs,
...Object.fromEntries(Object.entries(def)
.map(([key, value]) => [resolveFlagAlias(key), value])
.filter(([key, value]) => value === true ||
!isFlagSet(defs, key))),
}
: defs;
const mergeDefs = (defs, def) => ({
...defs,
id: def.id || defs.id,
auths: mergeArrays(defs.auths, def.auths),
schemas: mergeArrays(defs.schemas, def.schemas),
services: mergeArrays(defs.services, def.services),
mutations: { ...defs.mutations, ...def.mutations },
dictionaries: { ...defs.dictionaries, ...def.dictionaries },
jobs: mergeArrays(defs.jobs, def.jobs),
identConfig: def.identConfig || defs.identConfig,
queueService: def.queueService || defs.queueService,
disableQueuing: def.disableQueuing ?? defs.disableQueuing,
flags: mergeFlags(defs.flags || {}, def.flags),
});
export default function mergeDefinitions(...defs) {
return defs.filter(isObject).reduce(mergeDefs, {
id: undefined,
auths: [],
schemas: [],
services: [],
mutations: {},
dictionaries: {},
jobs: [],
identConfig: undefined,
queueService: undefined,
flags: {},
});
}
//# sourceMappingURL=mergeDefinitions.js.map