@augment-vir/common
Version:
A collection of augments, helpers types, functions, and classes for any JavaScript environment.
85 lines (84 loc) • 3.79 kB
TypeScript
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>;