export interface BaseJsonFileReaderOptions<DATA> {
    /**
     * cwd for <my-json>.json
     * <cwd>/<my-json>
     * (you can also provide full path - basename will be cut)
     */
    cwd?: string;
    /**
     * file name
     * example: package.json, taon.json etc.
     */
    fileName?: string;
    /**
     * json content to read from memory
     */
    jsonContent?: Partial<DATA>;
    /**
     * callback for external reload
     */
    reloadInMemoryCallback?: (data: DATA) => void;
    /**
     * use json with comments reader to read json file
     */
    readJsonAsJsonWithComments?: boolean;
    /**
     * default value for data
     * if file not exist
     * (ONLY FOR cwd + fileName mode)
     */
    defaultValue?: Partial<DATA>;
}
/**
 * Base class for reading json files
 * There are 2 modes of reading json files:
 * - cwd + fileName (read and write to disk in cwd)
 * - jsonContent (read and write to memory and use
 *   reloadInMemoryCallback for external reload)
 */
export declare class BaseJsonFileReader<DATA> {
    /**
     * null when package.json not exist
     */
    protected data: DATA | null;
    /**
     * use json with comments reader to read package.json
     */
    protected readonly readJsonAsJsonWithComments: boolean;
    readonly cwd: string;
    protected readonly fileName: string;
    /**
     * @deprecated
     * use only when cwd and fileName are not provided
     */
    protected readonly jsonContent?: Partial<DATA>;
    protected readonly defaultValue?: Partial<DATA>;
    protected readonly reloadInMemoryCallback?: (data: DATA) => void;
    constructor(options: BaseJsonFileReaderOptions<DATA>);
    /**
     * cwd + fileName
     */
    get path(): string;
    /**
     * if something else change package.json in this project
     * and you know that you need to reload it..
     */
    reloadPackageJsonInMemory(): void;
    saveToDisk(purpose?: string): void;
    linkTo(destination: string): void;
    getAllData(): DATA;
    setAllData(data: DATA): void;
}
