From 14ea267b67e7909e95a1f229aff733a0f10fae4f Mon Sep 17 00:00:00 2001 From: Memory <134070804+Memory2314@users.noreply.github.com> Date: Mon, 27 Apr 2026 20:30:11 +0800 Subject: [PATCH] fix: guard deepMerge + syntax behind isOverride --- src/main/core/factory.ts | 2 +- src/main/utils/merge.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/core/factory.ts b/src/main/core/factory.ts index 66bac323..ab5574f4 100644 --- a/src/main/core/factory.ts +++ b/src/main/core/factory.ts @@ -237,7 +237,7 @@ async function applyOverrides( case 'yaml': { let patch = parse(content) || {} if (typeof patch !== 'object') patch = {} - profile = deepMerge(profile, patch) + profile = deepMerge(profile, patch, true) break } } diff --git a/src/main/utils/merge.ts b/src/main/utils/merge.ts index 93e517ed..9d33c7d8 100644 --- a/src/main/utils/merge.ts +++ b/src/main/utils/merge.ts @@ -10,7 +10,7 @@ function trimWrap(str: string): string { return str } -export function deepMerge(target: T, other: Partial): T { +export function deepMerge(target: T, other: Partial, isOverride?: boolean): T { for (const key in other) { if (isObject(other[key])) { if (key.endsWith('!')) { @@ -19,14 +19,14 @@ export function deepMerge(target: T, other: Partial): T { } else { const k = trimWrap(key) if (!target[k]) Object.assign(target, { [k]: {} }) - deepMerge(target[k] as object, other[k] as object) + deepMerge(target[k] as object, other[k] as object, isOverride) } } else if (Array.isArray(other[key])) { - if (key.startsWith('+')) { + if (isOverride && key.startsWith('+')) { 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('+')) { + } else if (isOverride && key.endsWith('+')) { const k = trimWrap(key.slice(0, -1)) if (!target[k]) Object.assign(target, { [k]: [] }) target[k] = [...(target[k] as never[]), ...other[key]]