import { isNil, omitBy } from 'lodash-es'; import type { CleanObject, EntriesToObject, EntriesType, ObjectType } from '@tabulus/types'; const objectKeys = (object: T): Array => Object.keys(object) as Array; const objectEntries = < O extends object, K = keyof O, V = O extends Record ? L : never, >( object: O, ): Array<[K, V]> => Object.entries(object) as unknown as Array<[K, V]>; const fromEntries = (entries: ARR_T): EntriesToObject => Object.fromEntries(entries) as EntriesToObject; const cleanObject = (object: OBJ_T): CleanObject => omitBy(object, isNil) as CleanObject; const fullClean = (object: OBJ_T): CleanObject => omitBy(cleanObject(object), (_value, key) => key.startsWith('_')) as CleanObject; type ValidKey = number | string; const swapKeyValue = (object: Record): Record => Object.fromEntries(Object.entries(object).map(([key, value]) => [value, key])); export { cleanObject, fromEntries, fullClean, objectEntries, objectKeys, swapKeyValue };