/// <reference types="node" />
import { Stats as FsStats } from "fs";
import { Server } from "../Server";
import { Request } from "../Request";
import { Response } from "../Response";
import { DirItem } from "./Directories/DirItem";
import { IApplication } from "../Applications/IApplication";
import { IApplicationConstructor } from "../Applications/IApplicationConstructor";
import { Register } from "../Applications/Register";
import { FilesHandler } from "./File";
import { ErrorsHandler } from "./Error";
export declare class DirectoriesHandler {
    protected server: Server;
    protected cache: Register;
    protected filesHandler: FilesHandler;
    protected errorsHandler: ErrorsHandler;
    protected indexFiles: Map<string, number>;
    protected indexScripts: Map<string, number>;
    constructor(server: Server, cache: Register, filesHandler: FilesHandler, errorsHandler: ErrorsHandler);
    /**
     * @summary Display directory content or send index.html file:
     */
    HandleDirectory(fullPath: string, requestPath: string, dirStats: FsStats, dirItems: string[], statusCode: number, req: Request, res: Response): void;
    /**
     * @summary Process any application in index.js in directory request or on non-existing path request:
     */
    HandleIndexScript(dirFullPath: string, indexScript: string, indexScriptModTime: number, req: Request, res: Response): void;
    /**
     * @summary Render and send 403 forbidden page - do not list directory content:
     */
    HandleForbidden(res: Response): void;
    /**
     * @summary Get first index script (or index static file) file system stats:
     */
    protected indexScriptOrFileStats(fullPath: string, files: string[], index: number, successCallback: (indexFullPath: string, indexScript: string, indexScriptStats: FsStats) => void, errorCallback: () => void): void;
    /**
     * @summary Create directory index.js script module instance with optional development require cache resolving:
     */
    protected indexScriptModuleCreate(dirFullPath: string, indexScript: string, indexScriptModTime: number, req: Request, res: Response): Promise<IApplication>;
    /**
     * @summary Create directory index.js script module instance with optional development require cache resolving:
     */
    protected indexScriptModuleGetDeclaration(modulefullPath: string): IApplicationConstructor;
    /**
     * @summary Process directory index.js script http request handler with optional development require cache resolving:
     */
    protected indexScriptModuleExecute(fullPath: string, indexScript: string, appInstance: IApplication, req: Request, res: Response): Promise<void>;
    /**
     * @summary Go through all files and folders in current directory:
     */
    protected renderDirContent(statusCode: number, dirStats: FsStats, dirItemsNames: string[], reqRelPath: string, fullPath: string, res: Response): void;
    /**
     * @summary File system directory item stats handler to complete given `dirRows` and `fileRows` arrays.
     * @param reqRelPath
     * @param dirItemName
     * @param itemStats
     * @param dirRows
     * @param fileRows
     * @param resolve
     */
    protected renderDirContentRowStats(reqRelPath: string, dirItemName: string, itemStats: FsStats, dirRows: DirItem[], fileRows: DirItem[], resolve: (() => void)): void;
    /**
     * @summary Display directory content - complete directory row code for directory content:
     */
    protected renderDirContentDirRow(reqRelPath: string, dirItemName: string, itemStats: FsStats): string;
    /**
     * @summary Display directory content - complete file row code for directory content:
     */
    protected renderDirContentFileRow(reqRelPath: string, fileItemName: string, itemStats?: FsStats): string;
    /**
     * @summary Display directory content - send directory content html code:
     */
    protected handleDirContentRows(statusCode: number, path: string, fullPath: string, dirStats: FsStats, dirRows: DirItem[], fileRows: DirItem[], res: Response): void;
    /**
     * @summary Display directory content - complete heading code for directory content:
     */
    protected handleDirReqCompleteHeader(path: string, fullPath: string, dirStats: FsStats): string;
}
