{"version":3,"sources":["../src/object/deepMerge.ts"],"names":["hasMergeOptions","obj","isPlainObject","key","deepMerge","objs","hasOptions","$merge","$ignoreUndefined","skipKeys","assignObject","deepMergeItem","fromObj","toObj","fromValue","toValue","pre","cur","index"],"mappings":"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","file":"chunk-MQ5EEVI6.mjs","sourcesContent":["import { isPlainObject } from \"../typecheck/isPlainObject\"\r\nimport { assignObject } from \"./assignObject\"\r\n \r\n/**\r\n * 简单进行对象深度合并\r\n * \r\n * 返回合并后的新的对象\r\n * \r\n * 对lodash的merge的最大差别在于对数据进行替换与合并或去重\r\n * \r\n * @param {*} toObj \r\n * @param {*} formObj \r\n * @returns 合并后的对象\r\n */\r\nexport interface DeepMergeOptions{\r\n    $ignoreUndefined?: boolean                                            // 忽略undefined项不进行合并\r\n    // 声明同名项的合并策略，数组默认为unique，{}默认为append\r\n    $merge: 'replace' | 'append' | 'unique' | ((fromValue:any,toValue:any,ctx:{key:string,from:any,to:any})=>any)      \r\n}\r\n\r\nfunction hasMergeOptions(obj:Record<string | symbol,any> | undefined | null){\r\n    if(isPlainObject(obj)){\r\n        return [\"$merge\",\"$ignoreUndefined\"].some(key=>key in obj!)\r\n    }else{\r\n        return false\r\n    }    \r\n}\r\nexport function deepMerge(...objs:(Record<string | symbol,any> | undefined | null)[]){\r\n    if(objs.length<2) throw new Error(\"deepMerge函数至少需要两个参数\")\r\n    const hasOptions = objs.length >0 ? hasMergeOptions(objs[objs.length-1]) : false\r\n    // 读取配置参数对象\r\n    const {$merge,$ignoreUndefined,skipKeys} = assignObject({\r\n        skipKeys:[],\r\n        $ignoreUndefined:true,\r\n        $merge:\"replace\"\r\n    },hasOptions ? objs[objs.length-1] : {} )   \r\n    function deepMergeItem(fromObj:Record<string | symbol,any> | undefined | null,toObj:Record<string | symbol,any>){   \r\n        if(!isPlainObject(fromObj)) return\r\n        Object.entries(fromObj!).forEach(([key,fromValue]:[string,any])=>{\r\n            let toValue:any \r\n            if(key in toObj){\r\n                if(Array.isArray(fromValue) && Array.isArray(toObj[key])){\r\n                    if($merge === 'replace' ){\r\n                        toValue = fromValue\r\n                    }else if($merge === 'append'){\r\n                        toValue = [...toObj[key],...fromValue]\r\n                    }else if($merge === 'append'){\r\n                        toValue= [...new Set([...toObj[key],...fromValue])]\r\n                    }else if(typeof($merge) === 'function'){\r\n                        toValue = $merge(toObj[key],fromValue,{key,from:fromObj,to:toObj})\r\n                    }\r\n                    toObj[key] =$ignoreUndefined && fromValue===undefined ? toObj[key] : toValue\r\n                }else if(isPlainObject(fromValue) && isPlainObject(toObj[key])){\r\n                    deepMergeItem(fromValue,toObj[key])\r\n                }else{\r\n                    toObj[key] =$ignoreUndefined && fromValue===undefined ? toObj[key] : fromValue\r\n                }\r\n            }else{ \r\n                toObj[key] = fromValue\r\n            }             \r\n        })\r\n    }\r\n    return objs.reduce((pre,cur,index)=>{\r\n        if(index==0) return pre || {}\r\n        if(!isPlainObject(cur)) return pre        \r\n        if(hasOptions && index === objs.length-1) return pre\r\n        deepMergeItem(cur,pre || {})\r\n        return pre\r\n    },objs[0]) as Record<string | symbol,any>\r\n}"]}