A collection of utility functions for working with JavaScript objects.
pnpm add @pixpilot/objectimport {
deepClone,
isObject,
keysToCamelCase,
keysToSnakeCase,
omit,
pick,
} from '@pixpilot/object';
// Convert object keys
const obj = { user_name: 'john', user_details: { first_name: 'John' } };
const camelCaseObj = keysToCamelCase(obj);
// { userName: 'john', userDetails: { firstName: 'John' } }
const guidSafeObj = keysToCamelCase(obj, {
shouldConvert: (key) => key !== 'legacy_key',
});
// Manipulate objects
const picked = pick({ a: 1, b: 2, c: 3 }, ['a', 'c']); // { a: 1, c: 3 }
const omitted = omit({ a: 1, b: 2, c: 3 }, ['b']); // { a: 1, c: 3 }
// Clone deeply
const cloned = deepClone({ a: { b: { c: 1 } } });
// Type guards
if (isObject(value)) {
// value is typed as Record<string, unknown>
}isObject(value: unknown): value is Record<string, unknown>- Check if value is an objectisPlainObject(value: unknown): value is Record<string, unknown>- Check if value is a plain objectisEmptyObject(value: unknown): boolean- Check if object is empty
keysToCamelCase<T>(obj: T, options?: { shouldConvert?: (key: string) => boolean }): KeysToCamelCase<T>- Convert keys to camelCase, except GUID keys and keys rejected byshouldConvertkeysToSnakeCase<T>(obj: T): KeysToSnakeCase<T>- Convert all keys to snake_case
pick<T, K>(obj: T, keys: K[]): Pick<T, K>- Pick specific keys from objectomit<T, K>(obj: T, keys: K[]): Omit<T, K>- Omit specific keys from objectmerge<T, U>(target: T, source: U): T & U- Deep merge two objectsget<T>(obj: object, path: string, defaultValue?: T): T | undefined- Get nested value by pathset<T>(obj: T, path: string, value: unknown): T- Set nested value by pathhas(obj: object, path: string): boolean- Check if nested path existsflatKeys(obj: object, prefix?: string): string[]- Get all keys including nested pathsdeepClone<T>(obj: T): T- Deep clone an objectdeepEqual(obj1: unknown, obj2: unknown): boolean- Deep equality comparisonmapValues<T, U>(obj: T, fn: (value, key) => U): Record<keyof T, U>- Map over object valuesmapKeys<T>(obj: T, fn: (key) => string): Record<string, T[keyof T]>- Map over object keys
We welcome contributions! Please see the main contributing guide for details.
This project is licensed under the MIT License. See the LICENSE file for details.