UNPKG

@szydlovski/deep-object

Version:

utility functions for deeply nested objects

33 lines 1.17 kB
export function _deepObjectOperation(...args) { const [target, callback, depthFirst, pathSoFar = []] = args; const entries = Object.entries(target); const trvD = () => entries.forEach(([key, value]) => _isObject(value) && _deepObjectOperation(value, callback, depthFirst, [...pathSoFar, key])); const trvB = () => entries.forEach(([key, value]) => callback(value, key, [...pathSoFar, key], target, _isObject(value))); if (depthFirst) { trvD(); trvB(); } else { trvB(); trvD(); } } export function _isObject(value) { return (value !== null && typeof value === 'object' && value.constructor === Object); } export function _deepObjectTraverse(target, [...path], create = true) { let step; while (step = path.shift()) { if (!_isObject(target[step])) { if (create) { target[step] = {}; } else { throw new TypeError('Cannot traverse object, provided path does not exist'); } } target = target[step]; } return target; } //# sourceMappingURL=core.js.map