obj-walker
Version:
Walk or map over objects in a depth-first preorder or postorder manner.
31 lines (30 loc) • 967 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deref = exports.addRefs = void 0;
const json_decycle_1 = require("json-decycle");
const walker_1 = require("./walker");
/**
* Replace duplicate objects refs with pointers to the first
* object seen.
*/
const addRefs = (obj, options) => {
const fn = (0, json_decycle_1.decycle)();
const mapper = ({ key, val, parents }) => fn.call(parents[0], key ?? '', val);
return (0, walker_1.map)(obj, mapper, { ...options, jsonCompat: true });
};
exports.addRefs = addRefs;
/**
* Rehydrate objects by replacing refs with actual objects.
*/
const deref = (obj, options) => {
const fn = (0, json_decycle_1.retrocycle)();
const walkFn = ({ parents, key, val }) => {
fn.call(parents[0], key ?? '', val);
};
return (0, walker_1.walkEach)(obj, walkFn, {
...options,
postOrder: true,
jsonCompat: true,
});
};
exports.deref = deref;