UNPKG

integreat

Version:
46 lines 1.74 kB
import { deepClone } from '../../utils/deep.js'; export function prepareOptions({ transporter: { incoming, ...transporter } = {}, incoming: incomingBase, adapters, ...topLevel }) { const transporterOptions = { ...topLevel, ...transporter, ...(incoming || incomingBase ? { incoming: { ...incomingBase, ...incoming } } : {}), }; if (!adapters) { return { transporter: transporterOptions }; } const adapterOptions = Object.fromEntries(Object.entries(adapters || {}).map(([id, options]) => [ id, { ...topLevel, ...options }, ])); return { transporter: transporterOptions, adapters: adapterOptions }; } const removeIncoming = ({ incoming, ...options }) => options; export function mergeOptions(a, b) { const transporterOptions = deepClone({ ...removeIncoming(a.transporter), ...removeIncoming(b.transporter), }); if (a.transporter.incoming || b.transporter.incoming) { transporterOptions.incoming = deepClone({ ...a.transporter.incoming, ...b.transporter.incoming, }); } const adaptersA = a.adapters || {}; const adaptersB = b.adapters || {}; const adapterIds = [ ...Object.keys(adaptersA), ...Object.keys(adaptersB), ].filter((id, index, ids) => !ids.slice(0, index).includes(id)); if (adapterIds.length === 0) { return { transporter: transporterOptions }; } const adapterOptions = Object.fromEntries(adapterIds.map((id) => [ id, deepClone({ ...adaptersA[id], ...adaptersB[id] }), ])); return { transporter: transporterOptions, adapters: adapterOptions }; } //# sourceMappingURL=options.js.map