/**
 * Error thrown by the FileSystem which aims to be pretty
 * printed without the stacktrace.
 *
 * @export
 * @class ClientError
 * @extends {Error}
 */
export declare class ClientError extends Error {
    readonly name = "ClientError";
}
/**
 * This class provides more methods that Node std "fs".
 * It also allows to create an isolated directory during directory.
 *
 * @export
 * @class FileSystem
 */
export declare class FileSystem {
    currentDir: string;
    private readonly testDir;
    private logs;
    /**
     * Do not show create and update logs.
     *
     * @returns {this}
     * @memberof FileSystem
     */
    hideLogs(): this;
    /**
     * Changes the current working directory.
     *
     * @param {string} path - Relative path of the directory.
     * @returns {this}
     * @memberof FileSystem
     */
    cd(path: string): this;
    /**
     * Changes the current working directory to the project root
     * directory.
     *
     * It searches for the closer package.json containing @foal/core
     * as dependency.
     *
     * @returns {this}
     * @memberof FileSystem
     */
    cdProjectRootDir(): this;
    /**
     * Checks if a file or directory exists.
     *
     * @param {string} path - The path relative to the client directory.
     * @returns {boolean}
     * @memberof FileSystem
     */
    exists(path: string): boolean;
    /**
     * Recursively ensures that a directory exists. If the directory structure does not
     * exist, it is created.
     *
     * @param {string} path - The path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    ensureDir(path: string): this;
    /**
     * Recursively ensures that a directory exists if the condition is true.
     * If the directory structure does not exist, it is created.
     *
     * @param {boolean} condition - The condition.
     * @param {string} path - The path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    ensureDirOnlyIf(condition: boolean, path: string): this;
    /**
     * Ensures that the file exists. If the file does not exist, it is created.
     *
     * @param {string} path - The path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    ensureFile(path: string): this;
    /**
     * Copies a file from the `templates` directory.
     *
     * @param {string} src - The source path relative to the `templates/` directory.
     * @param {string} dest - The destination path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    copy(src: string, dest: string): this;
    /**
     * Copies a file from the `templates` directory if the condition is true.
     *
     * @param {boolean} condition - The condition.
     * @param {string} src - The source path relative to the `templates/` directory.
     * @param {string} dest - The destination path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    copyOnlyIf(condition: boolean, src: string, dest: string): this;
    /**
     * Copies and renders a template from the `templates` directory.
     *
     * @param {string} src - The source path relative to the `templates/` directory.
     * @param {string} dest - The destination path relative to the client directory.
     * @param {*} locals - The template variables.
     * @returns {this}
     * @memberof FileSystem
     */
    render(src: string, dest: string, locals: any): this;
    /**
     * Copies and renders a template from the `templates` directory if the condition is true.
     *
     * @param {boolean} condition - The condition.
     * @param {string} src - The source path relative to the `templates/` directory.
     * @param {string} dest - The destination path relative to the client directory.
     * @param {*} locals - The template variables.
     * @returns {this}
     * @memberof FileSystem
     */
    renderOnlyIf(condition: boolean, src: string, dest: string, locals: any): this;
    /**
     * Reads and modifies the content of a file.
     *
     * @param {string} path - The path relative to the client directory.
     * @param {(content: string) => string} callback - The callback that modifies the content.
     * @returns {this}
     * @memberof FileSystem
     */
    modify(path: string, callback: (content: string) => string): this;
    /**
     * Reads and modifies the content of a file if the condition is true.
     *
     * @param {boolean} condition - The condition.
     * @param {string} path - The path relative to the client directory.
     * @param {(content: string) => string} callback - The callback that modifies the content.
     * @returns {this}
     * @memberof FileSystem
     */
    modifyOnlyfIf(condition: boolean, path: string, callback: (content: string) => string): this;
    /**
     * Add a named import at the bottom of the file.
     *
     * @param {string} path - The file path relative to the client directory.
     * @param {string} specifier - The import specifier.
     * @param {string} source - The import source.
     * @returns {this}
     * @memberof FileSystem
     */
    addNamedExportIn(path: string, specifier: string, source: string): this;
    /**
     * Adds or extends a named import at the beginning of the file.
     *
     * If an import already exists with this source path, it is completed.
     * If it does not already exist, it is added at the end of all imports.
     *
     * @param {string} path - The file path relative to the client directory.
     * @param {string} specifier - The import specifier.
     * @param {string} source - The import source.
     * @returns {this}
     * @memberof FileSystem
     */
    addOrExtendNamedImportIn(path: string, specifier: string, source: string, options?: {
        logs: boolean;
    }): this;
    /**
     * Creates or adds an element to the array property of a class.
     *
     * If the class does not exist, this method does nothing.
     *
     * @param {string} path - The file path relative to the client directory.
     * @param {string} className - The class name.
     * @param {string} propertyName - The property name.
     * @param {string} element - The item to add to the array.
     * @returns {this}
     * @memberof FileSystem
     */
    addOrExtendClassArrayPropertyIn(path: string, propertyName: string, element: string, options?: {
        logs: boolean;
    }): this;
    /**
     * Returns true if the project package.json has this dependency.
     * Returns false otherwise.
     *
     * @param {string} name - The name of the dependency.
     * @returns {boolean}
     * @memberof FileSystem
     */
    projectHasDependency(name: string): boolean;
    /**
     * Returns the dependencies of the project package.json.
     *
     * @returns {{ name: string, version: string }[]}
     */
    getProjectDependencies(): {
        name: string;
        version: string;
    }[];
    /**
     * Returns the dev dependencies of the project package.json.
     *
     * @returns {{ name: string, version: string }[]}
     */
    getProjectDevDependencies(): {
        name: string;
        version: string;
    }[];
    /************************
        Testing Methods
    ************************/
    /**
     * Creates the test client directory. Sets current directory to none.
     *
     * @memberof FileSystem
     */
    setUp(): void;
    /**
     * Empties and removes the test client directory. Sets current directory to none.
     *
     * @memberof FileSystem
     */
    tearDown(): void;
    /**
     * Throws an error if the file or directory does not exist.
     *
     * @param {string} path - The path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    assertExists(path: string): this;
    /**
     * Throws an error if the file or directory exists.
     *
     * @param {string} path - The path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    assertNotExists(path: string): this;
    /**
     * Throws an error if the directory is not empty.
     *
     * @param {string} path - The path relative to the client directory.
     * @memberof FileSystem
     */
    assertEmptyDir(path: string): void;
    /**
     * Throws an error if the two files are different.
     *
     * @param {string} actual - The path relative to the client directory.
     * @param {string} expected - The path relative to the `specs/` directory.
     * @param {{ binary: boolean }} [{ binary }={ binary: true }] - Specify if the file is binary.
     * @returns {this}
     * @memberof FileSystem
     */
    assertEqual(actual: string, expected: string, { binary }?: {
        binary: boolean;
    }): this;
    /**
     * Copies a file from the `fixtures` directory.
     *
     * @param {string} src - The source path relative to the `fixtures/` directory.
     * @param {string} dest - The destination path relative to the client directory.
     * @returns {this}
     * @memberof FileSystem
     */
    copyFixture(src: string, dest: string): this;
    /**
     * Removes a file.
     *
     * @param {string} path - The path relative to the client directory.
     * @memberof FileSystem
     */
    rmfile(path: string): void;
    private isTestingEnvironment;
    private parse;
    private logCreate;
    private logUpdate;
}
