UNPKG

@voiceflow/common

Version:

Junk drawer of utility functions

73 lines (72 loc) 2.49 kB
import _isPlainObject from 'lodash/isPlainObject.js'; export { default as shallowEquals } from 'shallowequal'; export const selectField = (field) => (obj) => obj[field]; export const selectID = selectField('id'); export const selectKey = selectField('key'); export const selectValue = selectField('value'); export const isObject = (obj) => obj !== null && typeof obj === 'object'; export const isPlainObject = (obj) => _isPlainObject(obj); export const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key); export const omit = (obj, keys) => { const newObj = { ...obj }; if (keys.length > 3) { return keys.reduce((acc, key) => { delete acc[key]; return acc; }, newObj); } delete newObj[keys[0]]; if (keys.length === 1) return newObj; delete newObj[keys[1]]; if (keys.length === 2) return newObj; delete newObj[keys[2]]; return newObj; }; export const pick = (obj, keys) => { const newObj = {}; if (keys.length > 3) { return keys.reduce((acc, key) => { if (hasProperty(obj, key)) { acc[key] = obj[key]; } return acc; }, newObj); } if (keys.length === 0) return newObj; if (hasProperty(obj, keys[0])) { newObj[keys[0]] = obj[keys[0]]; } if (keys.length === 1) return newObj; if (hasProperty(obj, keys[1])) { newObj[keys[1]] = obj[keys[1]]; } if (keys.length === 2) return newObj; if (hasProperty(obj, keys[2])) { newObj[keys[2]] = obj[keys[2]]; } return newObj; }; export const pickBy = (obj, predicate) => Object.entries(obj).reduce((acc, [key, value]) => { if (predicate(key, value)) { acc[key] = value; } return acc; }, {}); export const omitBy = (obj, predicate) => Object.entries(obj).reduce((acc, [key, value]) => { if (predicate(key, value)) { delete acc[key]; } return acc; }, { ...obj }); /** * @deprecated use pickBy instead */ export const filterEntries = pickBy; export const mapEntry = (obj, callback) => Object.fromEntries(Object.entries(obj).map(callback)); export const mapValue = (obj, callback) => Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, callback(value)])); export const shallowPartialEquals = (obj, partial) => Object.entries(partial).every(([key, partialValue]) => hasProperty(obj, key) && partialValue === obj[key]);