Skip to content

Commit

Permalink
correction of merge syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
pompurin404 committed Oct 11, 2024
1 parent b1e39ab commit e7ba8e7
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions src/main/utils/merge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,36 @@ function isObject(item: any): boolean {
return item && typeof item === 'object' && !Array.isArray(item)
}

function trimWrap(str: string): string {
if (str.startsWith('<') && str.endsWith('>')) {
return str.slice(1, -1)
}
return str
}

export function deepMerge<T extends object>(target: T, other: Partial<T>): T {
for (const key in other) {
if (isObject(other[key])) {
if (key.endsWith('!')) {
const k = key.slice(0, -1)
const k = trimWrap(key.slice(0, -1))
target[k] = other[key]
} else {
if (!target[key]) Object.assign(target, { [key]: {} })
deepMerge(target[key] as object, other[key] as object)
const k = trimWrap(key)
if (!target[k]) Object.assign(target, { [k]: {} })
deepMerge(target[k] as object, other[k] as object)
}
} else if (Array.isArray(other[key])) {
if (key.startsWith('+')) {
const k = key.slice(1)
const k = trimWrap(key.slice(1))
if (!target[k]) Object.assign(target, { [k]: [] })
target[k] = [...other[key], ...(target[k] as never[])]
} else if (key.endsWith('+')) {
const k = key.slice(0, -1)
const k = trimWrap(key.slice(0, -1))
if (!target[k]) Object.assign(target, { [k]: [] })
target[k] = [...(target[k] as never[]), ...other[key]]
} else {
Object.assign(target, { [key]: other[key] })
const k = trimWrap(key)
Object.assign(target, { [k]: other[key] })
}
} else {
Object.assign(target, { [key]: other[key] })
Expand Down

0 comments on commit e7ba8e7

Please sign in to comment.