@nodescript/core
Version:
Visual programming language for Browser and Node
39 lines • 1.02 kB
JavaScript
import { anyEquals } from './compare.js';
export function merge(a, b) {
if (a == null || b == null) {
return b ?? a;
}
if (anyEquals(a, b)) {
return a;
}
if (Array.isArray(a) && Array.isArray(b)) {
return mergeArrays(a, b);
}
if (typeof a === 'object' && typeof b === 'object') {
return mergeObjects(a, b);
}
return [a, b];
}
function mergeArrays(a, b) {
const result = [];
for (let i = 0; i < Math.max(a.length, b.length); i++) {
const bothArrays = Array.isArray(a[i]) && Array.isArray(b[i]);
const val = merge(a[i], b[i]);
if (Array.isArray(val) && !bothArrays) {
result.push(...val);
}
else {
result.push(val);
}
}
return result;
}
function mergeObjects(a, b) {
const result = { ...a };
for (const [k, v] of Object.entries(b)) {
const res = merge(result[k], v);
result[k] = res;
}
return result;
}
//# sourceMappingURL=merge.js.map