type Extension = 'json' | 'yaml';
type Primitive = string | number | boolean | null | undefined;
type Pattern = string;
/**
 *
 * @params value
 * @params context
 * @returns Primitive | Promise<Primitive>
 */
type Converter = (value: Primitive, context: ConvertContext) => Primitive | Promise<Primitive>;
/**
 *
 */
interface Config {
    /**
     *
     * @default process.cwd()
     */
    cwd?: string;
    /**
     *
     */
    src: string;
    /**
     *
     */
    dist: string;
    /**
     *
     */
    ignore?: Pattern[];
    /**
     *
     * @param value
     * @param context
     */
    convert: Converter;
    /**
     *
     * @default ['json']
     */
    extensions?: Extension[];
    /**
     *
     * @default true
     */
    cache?: boolean;
    /**
     * @default false
     */
    parallel?: number | false;
}
interface ConvertContext {
    /**
     *
     */
    key: string;
    /**
     *
     */
    value: Primitive;
    /**
     *
     */
    file: FileContext;
}
interface FileContext {
    /**
     *
     */
    filePath: string;
    /**
     *
     */
    fileName: string;
    /**
     *
     */
    extension: Extension;
    /**
     *
     */
    outputFile: string;
    /**
     *
     */
    json: unknown;
}

declare function mimicTree(config: Config): Promise<void>;

export { Config as Option, mimicTree };
