rxdeep
Version:
RxJS deep state management
57 lines • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.change = exports.trace = void 0;
function isRaw(v) {
return v === null || v === undefined
|| typeof v === 'number' || typeof v === 'string' || typeof v === 'boolean'
|| v instanceof Date;
}
function trace(src, dest) {
if (src === dest) {
return undefined;
}
if (!isRaw(src) && !isRaw(dest)) {
var tr = { subs: {} };
var seen = new Set();
var changed = false;
for (var key in src) {
seen.add(key);
var subTrace = trace(src[key], dest[key]);
if (subTrace) {
tr.subs[key] = subTrace;
changed = true;
}
}
for (var key in dest) {
if (seen.has(key)) {
continue;
}
tr.subs[key] = trace(src[key], dest[key]);
changed = true;
}
if (changed) {
return tr;
}
else {
return undefined;
}
}
if (src instanceof Date && dest instanceof Date && +src !== +dest) {
return { from: src, to: dest };
}
/* istanbul ignore next */
if (src !== dest) {
return { from: src, to: dest };
}
}
exports.trace = trace;
function change(src, dest) {
var _trace = trace(src, dest);
if (_trace) {
return {
value: dest, trace: _trace
};
}
}
exports.change = change;
//# sourceMappingURL=trace.js.map