UNPKG

datum-merge

Version:

Simplified diff and merging for deeply nested objects

94 lines (93 loc) 3.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.selectObjKeys = exports.getGlobKeys = exports.createGlobRegex = exports.areArraysEqual = exports.toUniqueArray = exports.deepClone = exports.deepEqualsPath = exports.deepEquals = exports.createValueKeys = exports.getObjectKeys = void 0; const lodash_es_1 = require("lodash-es"); const fast_deep_equal_1 = __importDefault(require("fast-deep-equal")); function getObjectKeys(obj, excludeKeys, includeKeys) { if (!obj) { return []; } let sourceKeys = Object.keys(obj); if (includeKeys && !!includeKeys.length) { includeKeys.filter((k) => !sourceKeys.includes(k)) .forEach((k) => sourceKeys.push(k)); } if (excludeKeys && !!excludeKeys.length) { sourceKeys = sourceKeys.filter((k) => !excludeKeys.includes(k)); } return sourceKeys; } exports.getObjectKeys = getObjectKeys; ; function createValueKeys(keys, value) { return Object.fromEntries(keys.map((k) => [k, value])); } exports.createValueKeys = createValueKeys; function deepEquals(lhs, rhs) { return (0, fast_deep_equal_1.default)(lhs, rhs); } exports.deepEquals = deepEquals; function deepEqualsPath(lhs, rhs, atPath) { return (0, fast_deep_equal_1.default)((0, lodash_es_1.get)(lhs, atPath), (0, lodash_es_1.get)(rhs, atPath)); } exports.deepEqualsPath = deepEqualsPath; function deepClone(val) { return (0, lodash_es_1.cloneDeep)(val); } exports.deepClone = deepClone; function toUniqueArray(arr) { return [...new Set(arr)]; } exports.toUniqueArray = toUniqueArray; function areArraysEqual(arr1, arr2) { if (arr1 == null && arr2 == null) return true; if (arr1 == null || arr2 == null) return false; if (arr1.length !== arr2.length) return false; for (let i = 0; i < arr1.length; i++) { if (arr1[i] !== arr2[i]) { return false; } } return true; } exports.areArraysEqual = areArraysEqual; function createGlobRegex(search) { const pattern = search.replace(/\*/g, ".+"); return new RegExp(`^${pattern}$`); } exports.createGlobRegex = createGlobRegex; function getGlobKeys(obj, includePats = ["*"], excludeKeys) { const includeKeys = []; if (!obj || !(includePats === null || includePats === void 0 ? void 0 : includePats.length)) { return includeKeys; } const labels = getObjectKeys(obj, excludeKeys); if (!labels || !labels.length) { return includeKeys; } const globPats = includePats.filter((s) => s.includes("*")) .map((g) => createGlobRegex(g)); for (const label of labels) { if (includePats.includes(label)) { includeKeys.push(label); } else if (globPats.findIndex((r) => r.test(label)) >= 0) { includeKeys.push(label); } } return includeKeys; } exports.getGlobKeys = getGlobKeys; function selectObjKeys(obj, includeKeys) { if (!(includeKeys === null || includeKeys === void 0 ? void 0 : includeKeys.length)) return Object.assign({}, obj); return Object.fromEntries(Object.entries(obj) .filter(([k, _]) => includeKeys.includes(k))); } exports.selectObjKeys = selectObjKeys;