From e7ba8e77398d933247ac181bae8929c6ac43b6ce Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Fri, 11 Oct 2024 10:55:03 +0800 Subject: [PATCH] correction of merge syntax --- src/main/utils/merge.ts | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/utils/merge.ts b/src/main/utils/merge.ts index 2d012b3..93e517e 100644 --- a/src/main/utils/merge.ts +++ b/src/main/utils/merge.ts @@ -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(target: T, other: Partial): 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] })