rxdeep
Version:
RxJS deep state management
40 lines • 1.1 kB
JavaScript
import { isLeaf } from './types/changes';
function clean(l) {
if (l[l.length - 1] === undefined) {
l.length--;
clean(l);
}
}
export function reverse(change) {
if (isLeaf(change.trace)) {
return {
value: change.trace.from,
trace: {
from: change.trace.to,
to: change.trace.from,
}
};
}
else {
const revalue = Array.isArray(change.value) ? [...change.value] : Object.assign({}, change.value);
const retrace = {
subs: {}
};
for (let key in change.trace.subs) {
const reversed = reverse({
value: change.value ? change.value[key] : undefined,
trace: change.trace.subs[key],
});
revalue[key] = reversed.value;
retrace.subs[key] = reversed.trace;
}
if (Array.isArray(revalue)) {
clean(revalue);
}
return {
value: revalue,
trace: retrace,
};
}
}
//# sourceMappingURL=reverse.js.map