UNPKG

@augment-vir/common

Version:

A collection of augments, helpers types, functions, and classes for any JavaScript environment.

85 lines (84 loc) 3.79 kB
import { type CompleteValues, type ExcludeKeysWithMatchingValues, type ExtractKeysWithMatchingValues } from '@augment-vir/core'; import { type OptionalKeysOf, type RequiredKeysOf } from 'type-fest'; /** * Filters an object. Like * [`[].filter`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries) * but for objects. * * @category Object * @category Package : @augment-vir/common * @example * * ```ts * import {filterObject} from '@augment-vir'; * * filterObject({a: 1, b: 2, c: 3}, (key, value) => { * return value >= 2; * }); * // output is `{b: 2, c: 3}` * ``` * * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export declare function filterObject<ObjectGeneric>(inputObject: Readonly<ObjectGeneric>, callback: (key: keyof ObjectGeneric, value: CompleteValues<ObjectGeneric>, fullObject: ObjectGeneric) => boolean): Partial<ObjectGeneric>; /** * Converts any optionally `undefined` keys to partials with non-undefined values. This does not * exclude `null`. * * @category Object * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export type RemoveUndefinedValues<ObjectGeneric> = { [Key in ExcludeKeysWithMatchingValues<ObjectGeneric, undefined>]: ObjectGeneric[Key]; } & { [Key in ExtractKeysWithMatchingValues<ObjectGeneric, undefined>]?: Exclude<ObjectGeneric[Key], undefined>; }; /** * Converts any `undefined` values into `null`. * * @category Object * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export type ReplaceUndefinedValuesWithNull<ObjectGeneric> = { [Key in RequiredKeysOf<Extract<ObjectGeneric, object>>]: undefined extends ObjectGeneric[Key] ? Exclude<ObjectGeneric[Key], undefined> | null : ObjectGeneric[Key]; } & { [Key in OptionalKeysOf<Extract<ObjectGeneric, object>>]?: undefined extends Required<ObjectGeneric>[Key] ? Exclude<ObjectGeneric[Key], undefined> | null : ObjectGeneric[Key]; }; /** * Converts any `null` values into `undefined`. * * @category Object * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export type ReplaceNullValuesWithUndefined<ObjectGeneric> = { [Key in RequiredKeysOf<Extract<ObjectGeneric, object>>]: null extends ObjectGeneric[Key] ? Exclude<ObjectGeneric[Key], null> | undefined : ObjectGeneric[Key]; } & { [Key in OptionalKeysOf<Extract<ObjectGeneric, object>>]?: null extends Required<ObjectGeneric>[Key] ? Exclude<ObjectGeneric[Key], null> | undefined : ObjectGeneric[Key]; }; /** * Removes keys for values that are `undefined`. * * @category Object * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export declare function removeUndefinedValues<ObjectGeneric>(input: Readonly<ObjectGeneric>): RemoveUndefinedValues<ObjectGeneric>; /** * Replaces all `undefined` values with `null`. * * @category Object * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export declare function replaceUndefinedValuesWithNull<ObjectGeneric>(input: Readonly<ObjectGeneric>): ReplaceUndefinedValuesWithNull<ObjectGeneric>; /** * Replaces all `null` values with `undefined`. * * @category Object * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export declare function replaceNullValuesWithUndefined<ObjectGeneric>(input: Readonly<ObjectGeneric>): ReplaceNullValuesWithUndefined<ObjectGeneric>;