UNPKG

adnbn

Version:

Addon Bone - Cross-browser web extension framework with shared code base

15 lines (13 loc) 733 B
type ExcludeFunction<T> = T extends Function ? never : T; type Awaiter<T> = T | Promise<T>; type PickNonFunctionProperties<T> = { [K in keyof T as T[K] extends Function ? never : K]: T[K]; }; type ExcludeFunctionsFromProperties<T> = { [K in keyof T]: ExcludeFunction<T[K]>; }; type DeepAsyncProxy<T> = { [K in keyof T]: T[K] extends (...args: any[]) => any ? (...args: Parameters<T[K]>) => Promise<Awaited<ReturnType<T[K]>>> : T[K] extends object ? DeepAsyncProxyObject<T[K]> : () => Promise<Awaited<T[K]>>; }; type DeepAsyncProxyObject<T> = (() => Promise<DeepAsyncProxy<T>>) & DeepAsyncProxy<T>; export type { Awaiter, DeepAsyncProxy, DeepAsyncProxyObject, ExcludeFunctionsFromProperties, PickNonFunctionProperties };