aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
2 lines (1 loc) • 1.48 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.deepMerge=deepMerge;var errors_1=()=>{var tmp=require("../errors");return errors_1=()=>tmp,tmp},literal_string_1=()=>{var tmp=require("./literal-string");return literal_string_1=()=>tmp,tmp};const MERGE_EXCLUDE_KEYS=["Ref","Fn::Base64","Fn::Cidr","Fn::FindInMap","Fn::GetAtt","Fn::GetAZs","Fn::ImportValue","Fn::Join","Fn::Select","Fn::Split","Fn::Sub","Fn::Transform","Fn::And","Fn::Equals","Fn::If","Fn::Not","Fn::Or"];function deepMerge(target,...sources){for(const source of sources){if(typeof source!="object"||typeof target!="object")throw new(errors_1()).AssumptionError((0,literal_string_1().lit)`InvalidDeepMergeArguments`,`Invalid usage. Both source (${JSON.stringify(source)}) and target (${JSON.stringify(target)}) must be objects`);for(const key of Object.keys(source)){if(key==="__proto__"||key==="constructor"||key==="prototype")continue;const value=source[key];if(typeof value=="object"&&value!=null&&!Array.isArray(value)){typeof target[key]!="object"?target[key]={}:Object.keys(target[key]).length===1&&MERGE_EXCLUDE_KEYS.includes(Object.keys(target[key])[0])&&(target[key]={}),Object.keys(value).length===1&&MERGE_EXCLUDE_KEYS.includes(Object.keys(value)[0])&&(target[key]={}),deepMerge(target[key],value);const output=target[key];typeof output=="object"&&Object.keys(output).length===0&&delete target[key]}else value===void 0?delete target[key]:target[key]=value}}return target}