UNPKG

sharec-schema

Version:

Utilities for configuration files merge

48 lines (35 loc) 1.17 kB
// @ts-check const isEqual = require('lodash.isequal') const { pickBy, omitBy } = require('sharec-utils').map /** * @typedef {import('../').SchemaParam<Map<string, any>>} SchemaHashParam * @typedef {import('../').SchemaParams<Map<string, any>>} SchemaHashParams */ /** * Merges objects preseted as maps * @param {SchemaHashParams} params * @returns {SchemaHashParam} */ function hashAtom({ current, upcoming, cached }) { if (current && upcoming === undefined) return current if (current === undefined && upcoming) return upcoming const result = new Map(current) if (cached === undefined) { upcoming.forEach((value, key) => { result.set(key, value) }) return result } const removedFields = pickBy(cached, (value, key) => value !== undefined && current.get(key) === undefined) const ignoredFields = omitBy(current, (value, key) => { if (!cached.has(key)) return true if (isEqual(cached.get(key), value)) return true return false }) upcoming.forEach((value, key) => { if (removedFields.has(key) || ignoredFields.has(key)) return result.set(key, value) }) return result } module.exports = hashAtom