e2ed
Version:
E2E testing framework over Playwright
30 lines (29 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepMerge = void 0;
const asserts_1 = require("../asserts");
const isObjectAndNotAnArray_1 = require("./isObjectAndNotAnArray");
/**
* Deep merge two objects (arrays does not merge).
* `y` overwrites `x`; `x` and `y` are immutable.
*/
const deepMerge = (x, y) => {
const result = {};
for (const key of Object.keys(x)) {
const descriptor = Object.getOwnPropertyDescriptor(x, key);
(0, asserts_1.assertValueIsDefined)(descriptor, 'descriptor is defined', { key, x });
Object.defineProperty(result, key, descriptor);
}
for (const [key, value] of Object.entries(y)) {
if ((0, isObjectAndNotAnArray_1.isObjectAndNotAnArray)(x[key]) && (0, isObjectAndNotAnArray_1.isObjectAndNotAnArray)(value)) {
result[key] = (0, exports.deepMerge)(x[key], value);
}
else {
const descriptor = Object.getOwnPropertyDescriptor(y, key);
(0, asserts_1.assertValueIsDefined)(descriptor, 'descriptor is defined', { key, y });
Object.defineProperty(result, key, descriptor);
}
}
return result;
};
exports.deepMerge = deepMerge;