UNPKG

obj-walker

Version:

Walk or map over objects in a depth-first preorder or postorder manner.

31 lines (30 loc) 967 B
"use strict"; 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;