import { Chain } from "./chained-structures";
import { ClusterAllocator } from "./cluster-allocator";
import { ClusterChainLink } from "./cluster-chain";
import { BaseBootSectorInfo, Driver, Fat32Extension, FatBootInfo, FatFSDirectoryEntry, FatFSInformation } from "./types";
export declare class FatError extends Error {
}
export type CachedFatDirectoryEntry = CachedDirectory | FatFSDirectoryEntry;
export declare const FAT_MARKER_DELETED = 229;
export declare const FORBIDDEN_ATTRIBUTES_FOR_FILE: number;
export declare class CachedDirectory {
    private fat;
    initialCluster: number;
    underlying: FatFSDirectoryEntry | null;
    rawDirectoryEntries?: CachedFatDirectoryEntry[];
    constructor(fat: LowLevelFatFilesystem, initialCluster: number, underlying: FatFSDirectoryEntry | null);
    getEntries(): Promise<CachedFatDirectoryEntry[]>;
    findEntry(name: string, typeRequired?: 'directory' | 'file'): Promise<CachedFatDirectoryEntry | null>;
    listDir(): Promise<string[] | null>;
    static readyMade(fat: LowLevelFatFilesystem, entries: FatFSDirectoryEntry[], initialCluster: number, underlying: FatFSDirectoryEntry | null): CachedDirectory;
}
export declare enum FatType {
    Fat12 = 0,
    Fat16 = 1,
    Fat32 = 2
}
export declare class LowLevelFatFilesystem {
    driver: Driver;
    bootsectorInfo?: BaseBootSectorInfo;
    fatBootInfo?: FatBootInfo;
    fat32Extension?: Fat32Extension;
    fsInfo?: FatFSInformation;
    maxCluster: number;
    maxDataCluster: number;
    fatType: FatType;
    get isFat16Or12(): boolean;
    fat16ClusterAreaOffset: number;
    root?: CachedDirectory;
    isWritable: boolean;
    endOfChain: number[];
    alteredFATSectors: Set<number>;
    private fatAltered;
    private fatContents?;
    private alteredDirectoryEntries;
    allocator?: ClusterAllocator;
    private clusterToSector;
    readFATClusterEntry(number: number): number;
    writeFATClusterEntry(number: number, next: number): void;
    private get dataSectorOffset();
    get logicalSectorsPerFat(): number;
    get clusterSizeInBytes(): number;
    private constructor();
    private load;
    getRootDirectoryData(): Promise<FatFSDirectoryEntry[]>;
    markAsAltered(entry: CachedDirectory): void;
    markFatAsAltered(): void;
    consumeAllDirectoryEntries(data: Uint8Array, includeDeleted?: boolean): FatFSDirectoryEntry[];
    getClusterChainFromFAT(initialCluster: number): number[];
    constructClusterChain(initialCluster: number, enableAllocator?: boolean, limitLength?: number): Chain<ClusterChainLink>;
    readAndConsumeAllDirectoryEntries(initialCluster: number): Promise<FatFSDirectoryEntry[]>;
    readClusters(clusterNumber: number, count: number): Promise<Uint8Array>;
    writeClusters(clusterNumber: number, data: Uint8Array): Promise<void>;
    redefineClusterChain(oldInitialCluster: number, newChain: number[]): Promise<void>;
    flush(): Promise<void>;
    traverseEntries(path: string): Promise<CachedFatDirectoryEntry[] | null>;
    traverse(path: string): Promise<CachedFatDirectoryEntry | null>;
    static _create(driver: Driver, bypassCoherencyCheck?: boolean, forceFSType?: FatType): Promise<LowLevelFatFilesystem>;
}
//# sourceMappingURL=low-level.d.ts.map