import { type TsConfigResult } from 'get-tsconfig';
import { type InspectedFile, type AssemblerRcFile } from './types/common.ts';
/**
 * Exposes an intutive API to run actions when different kind of files
 * are changed. The FileSystem is built around the vocabulary used by
 * AdonisJS. Which includes:
 *
 * - Source files: TypeScript, JavaScript, JSON, JSX, TSX files that are included
 *   inside the "tsconfig.json" file are considered as source files.
 * - Meta files: Files registered under the "metaFiles" array of "adonisrc.ts" file
 *   are called meta files.
 * - Meta restart files: Meta files with "restart: true" enabled are called meta restart
 *   files.
 *
 * Using FileSystem you can register actions to be executed when a file changes in
 * one of the above categories.
 *
 * @example
 * const fs = new FileSystem(cwd, tsConfig, rcFile)
 * const file = fs.inspect('./app/controllers/users_controller.ts')
 */
export declare class FileSystem {
    #private;
    /**
     * Includes glob patterns extracted from "tsconfig.json" file.
     * Defaults to: ["**\/*"]
     */
    get includes(): string[];
    /**
     * Excludes glob patterns extracted from "tsconfig.json" file.
     *
     * Defaults to: [
     *   'node_modules/**',
     *   'bower_components/**',
     *   'jspm_packages/**,
     * ]
     *
     * Following patterns are always ignored
     *
     * '.git/**', 'coverage/**', '.github/**', '.adonisjs/**', 'tmp/**', 'storage/**', 'build/**'
     */
    get excludes(): string[];
    /**
     * Inspect a file path to determine its type and properties within the project.
     *
     * This method analyzes a file to categorize it as a script file, test file, or meta file,
     * and determines whether changes to the file should trigger server restarts. Results
     * are memoized for performance optimization.
     *
     * @param absolutePath - The absolute Unix path to the file
     * @param relativePath - The relative Unix path from the project root
     * @returns File inspection result or null if the file should be ignored
     *
     * @example
     * const file = fileSystem.inspect('/project/app/models/user.ts', 'app/models/user.ts')
     * if (file) {
     *   console.log(file.fileType) // 'script'
     *   console.log(file.reloadServer) // true
     * }
     */
    inspect: (input: string, args_0?: string | undefined) => InspectedFile | null;
    /**
     * Determines if a directory should be watched by the file watcher.
     *
     * This method checks if a directory should be monitored for file changes
     * based on the TypeScript configuration includes/excludes patterns.
     * Results are memoized for performance. Chokidar sends absolute Unix paths.
     *
     * Note: Use shouldWatchFile for files and this method for directories only.
     *
     * @param absolutePath - The absolute Unix path to the directory
     * @returns True if the directory should be watched
     *
     * @example
     * const shouldWatch = fileSystem.shouldWatchDirectory('/project/app/controllers')
     * console.log(shouldWatch) // true
     */
    shouldWatchDirectory: (input: string) => unknown;
    /**
     * Create a new FileSystem instance
     *
     * @param cwd - The current working directory URL or string path
     * @param tsConfig - Parsed TypeScript configuration
     * @param rcFile - AdonisJS RC file configuration
     */
    constructor(cwd: string, tsConfig: TsConfigResult, rcFile: AssemblerRcFile);
    /**
     * Returns true if the file should be watched. Chokidar sends
     * absolute unix paths to the ignored callback.
     *
     * You must use "shouldWatchDirectory" method for directories and call
     * this method for files only.
     *
     * @param absolutePath - The absolute path to the file
     * @returns True if the file should be watched
     */
    shouldWatchFile(absolutePath: string): boolean;
}
