UNPKG

@etsoo/toolpad

Version:

Dashboard framework extention based on Toolpad Core

54 lines (53 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.asArray = asArray; exports.hasOwnProperty = hasOwnProperty; exports.mapProperties = mapProperties; exports.mapKeys = mapKeys; exports.mapValues = mapValues; exports.filterValues = filterValues; exports.filterKeys = filterKeys; exports.equalProperties = equalProperties; function asArray(maybeArray) { return Array.isArray(maybeArray) ? maybeArray : [maybeArray]; } /** * Type aware version of Object.protoype.hasOwnProperty. * See https://fettblog.eu/typescript-hasownproperty/ */ function hasOwnProperty(obj, prop) { return obj.hasOwnProperty(prop); } function mapProperties(obj, mapper) { return Object.fromEntries(Object.entries(obj).flatMap((entry) => { const mapped = mapper(entry); return mapped ? [mapped] : []; })); } /** * Maps an objects' property keys. The result is a new object with the mapped keys, but the same values. */ function mapKeys(obj, mapper) { return mapProperties(obj, ([key, value]) => [mapper(key), value]); } /** * Maps an objects' property values. The result is a new object with the same keys, but mapped values. */ function mapValues(obj, mapper) { return mapProperties(obj, ([key, value]) => [key, mapper(value, key)]); } function filterValues(obj, filter) { return mapProperties(obj, ([key, value]) => filter(value) ? [key, value] : null); } function filterKeys(obj, filter) { return mapProperties(obj, ([key, value]) => filter(key) ? [key, value] : null); } /** * Compares the properties of two objects. Returns `true` if all properties are strictly equal, `false` * otherwise. * Pass a subset of properties to only compare those. */ function equalProperties(obj1, obj2, subset) { const keysToCheck = new Set(subset ?? [...Object.keys(obj1), ...Object.keys(obj2)]); return Array.from(keysToCheck).every((key) => Object.is(obj1[key], obj2[key])); }