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) {
|
function deepMerge(target, source) {
|
||||||
for (const key of Object.keys(source)) {
|
const result = { ...source };
|
||||||
if (!(key in target)) {
|
for (const key of Object.keys(target)) {
|
||||||
target[key] = source[key];
|
if (key in source) {
|
||||||
} else if (typeof source[key] === 'object' && !Array.isArray(source[key]) &&
|
if (typeof source[key] === 'object' && !Array.isArray(source[key]) &&
|
||||||
typeof target[key] === 'object' && !Array.isArray(target[key])) {
|
typeof target[key] === 'object' && !Array.isArray(target[key])) {
|
||||||
deepMerge(target[key], source[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');
|
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) {
|
if (newKeys.length > 0) {
|
||||||
console.log(`--> Added ${newKeys.length} new key(s) to ${path.basename(destFile)}`);
|
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`);
|
console.log(`--> [OK] ${path.basename(destFile)} is up to date`);
|
||||||
|
|||||||
Reference in New Issue
Block a user