@nlabs/lex
Version:
40 lines (39 loc) • 4.1 kB
JavaScript
/**
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
*/ /**
* Deep merge function that recursively merges objects and arrays
* @param target - The target object to merge into
* @param source - The source object to merge from
* @returns The merged object
*/ export const deepMerge = (target, source)=>{
if (!source) {
return target;
}
const result = {
...target
};
for(const key in source){
if (source.hasOwnProperty(key)) {
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
result[key] = deepMerge(target[key] || {}, source[key]);
} else if (Array.isArray(source[key])) {
// For arrays, merge if both are arrays, otherwise replace
if (Array.isArray(target[key])) {
result[key] = [
...target[key],
...source[key]
];
} else {
result[key] = [
...source[key]
];
}
} else {
result[key] = source[key];
}
}
}
return result;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWVwTWVyZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGZ1bmN0aW9uIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZGVlcE1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSA9PiB7XG4gIGlmKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gey4uLnRhcmdldH07XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZihzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYoc291cmNlW2tleV0gJiYgdHlwZW9mIHNvdXJjZVtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodGFyZ2V0W2tleV0gfHwge30sIHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXlzLCBtZXJnZSBpZiBib3RoIGFyZSBhcnJheXMsIG90aGVyd2lzZSByZXBsYWNlXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbLi4udGFyZ2V0W2tleV0sIC4uLnNvdXJjZVtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsuLi5zb3VyY2Vba2V5XV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sIm5hbWVzIjpbImRlZXBNZXJnZSIsInRhcmdldCIsInNvdXJjZSIsInJlc3VsdCIsImtleSIsImhhc093blByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRDs7Ozs7Q0FLQyxHQUNELE9BQU8sTUFBTUEsWUFBWSxDQUFDQyxRQUFhQztJQUNyQyxJQUFHLENBQUNBLFFBQVE7UUFDVixPQUFPRDtJQUNUO0lBRUEsTUFBTUUsU0FBUztRQUFDLEdBQUdGLE1BQU07SUFBQTtJQUV6QixJQUFJLE1BQU1HLE9BQU9GLE9BQVE7UUFDdkIsSUFBR0EsT0FBT0csY0FBYyxDQUFDRCxNQUFNO1lBQzdCLElBQUdGLE1BQU0sQ0FBQ0UsSUFBSSxJQUFJLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxLQUFLLFlBQVksQ0FBQ0UsTUFBTUMsT0FBTyxDQUFDTCxNQUFNLENBQUNFLElBQUksR0FBRztnQkFDaEZELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHSixVQUFVQyxNQUFNLENBQUNHLElBQUksSUFBSSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0UsSUFBSTtZQUN4RCxPQUFPLElBQUdFLE1BQU1DLE9BQU8sQ0FBQ0wsTUFBTSxDQUFDRSxJQUFJLEdBQUc7Z0JBQ3BDLDBEQUEwRDtnQkFDMUQsSUFBR0UsTUFBTUMsT0FBTyxDQUFDTixNQUFNLENBQUNHLElBQUksR0FBRztvQkFDN0JELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHOzJCQUFJSCxNQUFNLENBQUNHLElBQUk7MkJBQUtGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEQsT0FBTztvQkFDTEQsTUFBTSxDQUFDQyxJQUFJLEdBQUc7MkJBQUlGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEM7WUFDRixPQUFPO2dCQUNMRCxNQUFNLENBQUNDLElBQUksR0FBR0YsTUFBTSxDQUFDRSxJQUFJO1lBQzNCO1FBQ0Y7SUFDRjtJQUVBLE9BQU9EO0FBQ1QsRUFBRSJ9