{"version":3,"file":"deep-assign.js","sourceRoot":"","sources":["../../src/utils/deep-assign.ts"],"names":[],"mappings":"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","sourcesContent":["const MAX_MIX_LEVEL = 5; // 最大比对层级\n\nconst toString = {}.toString;\n\n// 类型检测\nconst isType = (value: any, type: string): boolean => toString.call(value) === '[object ' + type + ']';\n\nconst isArray = (value: any): value is Array => {\n return isType(value, 'Array');\n};\n\nconst isObjectLike = (value: any): value is object => {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n */\n return typeof value === 'object' && value !== null;\n};\n\nconst isPlainObject = (value: any): value is object => {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\n\n/***\n * @param {any} dist\n * @param {any} src\n * @param {number} level 当前层级\n * @param {number} maxLevel 最大层级\n */\nconst deep = (dist, src, level?, maxLevel?) => {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n for (const key in src) {\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n const value = src[key];\n if (!value) {\n // null 、 undefined 等情况直接赋值\n dist[key] = value;\n } else {\n if (isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n if (level < maxLevel) {\n deep(dist[key], value, level + 1, maxLevel);\n } else {\n // 层级过深直接赋值,性能问题\n dist[key] = src[key];\n }\n } else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n } else {\n dist[key] = value;\n }\n }\n }\n }\n};\n\n/**\n * deepAssign 功能类似 deepMix\n * 不同点在于 deepAssign 会将 null undefined 等类型直接覆盖给 source\n * 详细参考: __tests__/unit/utils/deep-assign-spec.ts\n */\nexport const deepAssign = (rst: any, ...args: any[]) => {\n for (let i = 0; i < args.length; i += 1) {\n deep(rst, args[i]);\n }\n return rst;\n};\n"]}