kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
63 wiersze
1.4 KiB
TypeScript
63 wiersze
1.4 KiB
TypeScript
![]() |
export { default as assert } from 'tiny-invariant'
|
||
|
|
||
|
/**
|
||
|
* From `inputObj`, create a new object that does not include `keys`.
|
||
|
*
|
||
|
* @example
|
||
|
* ```js
|
||
|
* omit({ a: 1, b: 2, c: 3 }, 'a', 'c') // { b: 2 }
|
||
|
* ```
|
||
|
*/
|
||
|
export const omit = <
|
||
|
T extends Record<any, unknown>,
|
||
|
K extends keyof T = keyof T
|
||
|
>(
|
||
|
inputObj: T,
|
||
|
...keys: K[]
|
||
|
): Omit<T, K> => {
|
||
|
const keysSet = new Set(keys)
|
||
|
return Object.fromEntries(
|
||
|
Object.entries(inputObj).filter(([k]) => !keysSet.has(k as any))
|
||
|
) as any
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* From `inputObj`, create a new object that only includes `keys`.
|
||
|
*
|
||
|
* @example
|
||
|
* ```js
|
||
|
* pick({ a: 1, b: 2, c: 3 }, 'a', 'c') // { a: 1, c: 3 }
|
||
|
* ```
|
||
|
*/
|
||
|
export const pick = <
|
||
|
T extends Record<any, unknown>,
|
||
|
K extends keyof T = keyof T
|
||
|
>(
|
||
|
inputObj: T,
|
||
|
...keys: K[]
|
||
|
): Pick<T, K> => {
|
||
|
const keysSet = new Set(keys)
|
||
|
return Object.fromEntries(
|
||
|
Object.entries(inputObj).filter(([k]) => keysSet.has(k as any))
|
||
|
) as any
|
||
|
}
|
||
|
|
||
|
export function pruneUndefined<T extends Record<string, any>>(
|
||
|
obj: T
|
||
|
): NonNullable<T> {
|
||
|
return Object.fromEntries(
|
||
|
Object.entries(obj).filter(([, value]) => value !== undefined)
|
||
|
) as NonNullable<T>
|
||
|
}
|
||
|
|
||
|
export function getEnv(name: string): string | undefined {
|
||
|
try {
|
||
|
return typeof process !== 'undefined'
|
||
|
? // eslint-disable-next-line no-process-env
|
||
|
process.env?.[name]
|
||
|
: undefined
|
||
|
} catch {
|
||
|
return undefined
|
||
|
}
|
||
|
}
|