UNPKG

@pirireis/react-carto-map-gl

Version:

81 lines (67 loc) 1.73 kB
import {isEqual, cloneDeep} from 'lodash-es'; import objectFromEntries from './objectFromEntries'; const vizForbiddenFields = [ 'classifierUID', 'inlineMaker', '_shaderBindings', 'notify', 'parent', ]; const variablesForbiddenFields = [ 'classifierUID', 'inlineMaker', '_metadata', '_variableName', 'type', '_shaderBindings', 'notify', 'parent', '_input', '_value', 'childrenNames', 'preface', '_originalInput', '_paused', 'progress', ]; const metadataForbiddenFields = ['categories', 'codec']; function decycleAndClear( obj, // eslint-disable-next-line no-use-before-define forbiddenFields = vizForbiddenFields, stack = [], ) { if (!obj || typeof obj !== 'object') return obj; if (stack.includes(obj)) return null; const s = stack.concat([obj]); return Array.isArray(obj) ? obj.map(x => decycleAndClear(x, forbiddenFields, s)) : objectFromEntries( Object.entries(obj) .map(([k, v]) => { if (forbiddenFields.includes(k)) return null; // Maybe unnecessary. Better safe than sorry. if (typeof v === 'function') return null; return [k, decycleAndClear(v, forbiddenFields, s)]; }) .filter(i => i), ); } export function isVizEqual(a, b) { return isEqual( decycleAndClear(cloneDeep(a), vizForbiddenFields), decycleAndClear(cloneDeep(b), vizForbiddenFields), ); } export function isVizVariablesEqual(a, b) { return isEqual( decycleAndClear(cloneDeep(a), variablesForbiddenFields), decycleAndClear(cloneDeep(b), variablesForbiddenFields), ); } export function isSourcemetadataEqual(a, b) { return isEqual( decycleAndClear(cloneDeep(a), metadataForbiddenFields), decycleAndClear(cloneDeep(b), metadataForbiddenFields), ); }