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, K extends keyof T = keyof T >( inputObj: T, ...keys: K[] ): Omit => { 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, K extends keyof T = keyof T >( inputObj: T, ...keys: K[] ): Pick => { const keysSet = new Set(keys) return Object.fromEntries( Object.entries(inputObj).filter(([k]) => keysSet.has(k as any)) ) as any } export function pruneUndefined>( obj: T ): NonNullable { return Object.fromEntries( Object.entries(obj).filter(([, value]) => value !== undefined) ) as NonNullable } 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 } }