MCPcopy Create free account
hub / github.com/antfu/utils / deepMergeWithArray

Function deepMergeWithArray

src/object.ts:128–172  ·  view source on GitHub ↗
(target: T, ...sources: S[])

Source from the content-addressed store, hash-verified

126 * @category Object
127 */
128export function deepMergeWithArray<T extends object = object, S extends object = T>(target: T, ...sources: S[]): DeepMerge<T, S> {
129 if (!sources.length)
130 return target as any
131
132 const source = sources.shift()
133 if (source === undefined)
134 return target as any
135
136 if (Array.isArray(target) && Array.isArray(source))
137 target.push(...source)
138
139 if (isMergableObject(target) && isMergableObject(source)) {
140 objectKeys(source).forEach((key) => {
141 if (key === '__proto__' || key === 'constructor' || key === 'prototype')
142 return
143
144 // @ts-expect-error
145 if (Array.isArray(source[key])) {
146 // @ts-expect-error
147 if (!target[key])
148 // @ts-expect-error
149 target[key] = []
150
151 // @ts-expect-error
152 deepMergeWithArray(target[key], source[key])
153 }
154 // @ts-expect-error
155 else if (isMergableObject(source[key])) {
156 // @ts-expect-error
157 if (!target[key])
158 // @ts-expect-error
159 target[key] = {}
160
161 // @ts-expect-error
162 deepMergeWithArray(target[key], source[key])
163 }
164 else {
165 // @ts-expect-error
166 target[key] = source[key]
167 }
168 })
169 }
170
171 return deepMergeWithArray(target, ...sources)
172}
173
174function isMergableObject(item: any): item is object {
175 return isObject(item) && !Array.isArray(item)

Callers 1

object.test.tsFile · 0.90

Calls 3

isMergableObjectFunction · 0.85
objectKeysFunction · 0.85
forEachMethod · 0.80

Tested by

no test coverage detected