export type Narrow = INPUT extends Promise ? Promise> : INPUT extends (...args: infer ARGS) => infer RETURN ? (...args: Narrow) => Narrow : INPUT extends [] ? [] : INPUT extends object ? {
[KEY in keyof INPUT]: Narrow;
} : INPUT extends string | number | boolean | bigint ? INPUT : never;