@shutootaki/gwm
Version:
git worktree manager CLI
41 lines • 1.46 kB
JavaScript
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