fix: preserve .example key order in merge-config, including nested objects

This commit is contained in:
root
2026-06-07 16:45:05 +02:00
parent ef559ce64b
commit 618615a8b1
+25 -10
View File
@@ -11,15 +11,20 @@ if (!srcFile || !destFile) {
}
function deepMerge(target, source) {
for (const key of Object.keys(source)) {
if (!(key in target)) {
target[key] = source[key];
} else if (typeof source[key] === 'object' && !Array.isArray(source[key]) &&
typeof target[key] === 'object' && !Array.isArray(target[key])) {
deepMerge(target[key], source[key]);
const result = { ...source };
for (const key of Object.keys(target)) {
if (key in source) {
if (typeof source[key] === 'object' && !Array.isArray(source[key]) &&
typeof target[key] === 'object' && !Array.isArray(target[key])) {
result[key] = deepMerge(target[key], source[key]);
} else {
result[key] = target[key];
}
} else {
result[key] = target[key];
}
}
return target;
return result;
}
const srcContent = fs.readFileSync(srcFile, 'utf8');
@@ -49,12 +54,22 @@ if (fs.existsSync(destFile)) {
}
}
const merged = deepMerge(destData, srcData);
const fullMerged = deepMerge(destData, srcData);
const newKeys = Object.keys(merged).filter(k => !existingKeys.includes(k));
const ordered = {};
for (const key of Object.keys(srcData)) {
ordered[key] = fullMerged[key];
}
for (const key of Object.keys(destData)) {
if (!(key in srcData)) {
ordered[key] = destData[key];
}
}
const newKeys = Object.keys(ordered).filter(k => !existingKeys.includes(k));
if (newKeys.length > 0) {
console.log(`--> Added ${newKeys.length} new key(s) to ${path.basename(destFile)}`);
}
fs.writeFileSync(destFile, JSON.stringify(merged, null, 4) + '\n');
fs.writeFileSync(destFile, JSON.stringify(ordered, null, 4) + '\n');
console.log(`--> [OK] ${path.basename(destFile)} is up to date`);