UNPKG

@shutootaki/gwm

Version:
41 lines 1.46 kB
import { isPlainObject } from './guards.js'; /** * 2つの設定オブジェクトを深くマージする * * マージ規則: * - スカラー値(文字列/数値/真偽値): project 設定が上書き * - ネストしたオブジェクト: 再帰的にマージ * - 配列: project 設定で全置換(結合しない) * * @param global グローバル設定 * @param project プロジェクト設定(null の場合はグローバル設定をそのまま返す) * @returns マージされた設定 */ export function deepMerge(global, project) { if (!project) { return global; } const result = { ...global }; for (const key of Object.keys(project)) { const globalValue = global[key]; const projectValue = project[key]; if (projectValue === undefined) { // project が undefined の場合は global の値を維持 continue; } if (Array.isArray(projectValue)) { // 配列は全置換 result[key] = projectValue; } else if (isPlainObject(projectValue) && isPlainObject(globalValue)) { // ネストしたオブジェクトは再帰マージ result[key] = deepMerge(globalValue, projectValue); } else { // スカラー値は project で上書き result[key] = projectValue; } } return result; } //# sourceMappingURL=merger.js.map