export type MaybePromise<T> = T | Promise<T>;
export type DeepPartial<T> = T extends (...args: any) => any ? T : { [P in keyof T]?: DeepPartial<T[P]> };
export type DeepReadonly<T> = T extends (...args: any) => any ? T : T extends {
  __TAG__: true;
} ? T : { readonly [P in keyof T]: DeepReadonly<T[P]> } & {
  __TAG__: true;
};