File: //home/arjun/projects/buyercall/node_modules/bootstrap-vue-next/src/utils/object.ts
/**
* Removes properties from an object, based on the values in an array, and returns the new object.
* Equivalent to an object version of TS Omit<>
*/
export const omit = <
A extends Record<PropertyKey, unknown>,
const B extends ReadonlyArray<PropertyKey>,
>(
objToPluck: A,
keysToPluck: B | (keyof A)[]
): Omit<A, B[number]> =>
Object.keys(objToPluck)
.filter((key) => !keysToPluck.map((el) => el.toString()).includes(key))
.reduce((result, key) => ({...result, [key]: objToPluck[key]}), {} as Omit<A, B[number]>)
/**
* Picks properties from an object, base on the values in an array, and returns the new object.
* Equivalent to an object version of TS Pick<>
*/
export const pick = <
A extends Record<PropertyKey, unknown>,
const B extends ReadonlyArray<PropertyKey>,
>(
objToPluck: A,
keysToPluck: B | (keyof A)[]
): Pick<A, B[number]> =>
[...keysToPluck].reduce(
(memo, prop) => {
memo[prop] = objToPluck[prop]
return memo
},
{} as Record<PropertyKey, unknown>
) as Pick<A, B[number]>
/**
* Dynamically get a nested value from an array or
* object with a string.
*
* @example get(person, 'friends[0].name')
* @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214
*/
export const get = <TDefault = unknown>(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
value: any,
path: string,
defaultValue?: TDefault
): TDefault => {
const segments = path.split(/[.[\]]/g)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let current: any = value
for (const key of segments) {
if (current === null) return defaultValue as TDefault
if (current === undefined) return defaultValue as TDefault
if (key.trim() === '') continue
current = current[key]
}
if (current === undefined) return defaultValue as TDefault
return current
}