export interface PrepareData { refMap: Map; } export interface PrepareContext { pathArray: unknown[]; accessedSet: Set; prepareData: PrepareData; } export interface ToStringContext { depth: number; accessedRefSet: Set; prepareData: PrepareData; } export interface Rule { test(data: unknown): data is DATA_TYPE; prepare?(this: this, data: DATA_TYPE, config: RequiredConfig, context: PrepareContext): void; toString(this: this, data: DATA_TYPE, config: RequiredConfig, context: ToStringContext): string; } export interface BasicConfig { rules?: Rule[] | ((data: unknown, config: RequiredConfig, context: PrepareContext | ToStringContext) => Rule[]); indent?: number | string; depth?: number; ref?: boolean; object?: { unenumerable?: boolean; symbol?: boolean; get?: boolean; getter?: boolean; setter?: boolean; prototype?: boolean; exclude?: PropertyKey[] | Set | ((key: PropertyKey) => boolean); }; } export interface Config extends BasicConfig { } export type RequiredConfig = Required & Config;