export type Awaitable = T | PromiseLike export type Nullable = T | null | undefined export type Arrayable = T | Array export type ArgumentsType = T extends (...args: infer U) => any ? U : never export type MergeInsertions = T extends object ? { [K in keyof T]: MergeInsertions } : T export type DeepMerge = MergeInsertions<{ [K in keyof F | keyof S]: K extends keyof S & keyof F ? DeepMerge : K extends keyof S ? S[K] : K extends keyof F ? F[K] : never }> export interface Constructable { new (...args: any[]): any } export interface ParsedStack { method: string file: string line: number column: number } export interface SerializedError { message: string stacks?: ParsedStack[] stack?: string name?: string cause?: SerializedError [key: string]: unknown } export interface TestError extends SerializedError { cause?: TestError diff?: string actual?: string expected?: string }