You've already forked Atomcms-edit
fix: preserve .example key order in merge-config, including nested objects
This commit is contained in:
+25
-10
@@ -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`);
|
||||
|
||||
Reference in New Issue
Block a user