import { FileError } from "./FileError";
import { FileWriter } from "./filewriter";
export interface LocalFileSystem {
    readonly TEMPORARY: number;
    readonly PERSISTENT: number;
    requestFileSystem(type: number, size: number, successCallback: FileSystemCallback, errorCallback?: ErrorCallback): void;
    resolveLocalFileSystemURL(url: string, successCallback: EntryCallback, errorCallback?: ErrorCallback): void;
}
export interface Metadata {
    readonly modificationTime: Date;
    readonly size: number;
}
export interface Flags {
    create?: boolean;
    exclusive?: boolean;
}
export interface FileSystem {
    readonly name: string;
    readonly root: DirectoryEntry;
}
export interface Entry {
    readonly isFile: boolean;
    readonly isDirectory: boolean;
    getMetadata(successCallback: MetadataCallback, errorCallback?: ErrorCallback): void;
    readonly name: string;
    readonly fullPath: string;
    readonly filesystem: FileSystem;
    moveTo(parent: DirectoryEntry, newName?: string, successCallback?: EntryCallback, errorCallback?: ErrorCallback): void;
    copyTo(parent: DirectoryEntry, newName?: string, successCallback?: EntryCallback, errorCallback?: ErrorCallback): void;
    toURL(urlCallback: URLCallback, errorCallback?: ErrorCallback, method?: "GET" | "POST" | "PUT" | "DELETE"): void;
    remove(successCallback: VoidCallback, errorCallback?: ErrorCallback): void;
    getParent(successCallback: DirectoryEntryCallback, errorCallback?: ErrorCallback): void;
}
export interface DirectoryEntry extends Entry {
    createReader(): DirectoryReader;
    getFile(path: string, options?: Flags, successCallback?: FileEntryCallback, errorCallback?: ErrorCallback): void;
    getDirectory(path: string, options?: Flags, successCallback?: DirectoryEntryCallback, errorCallback?: ErrorCallback): void;
    list(successCallback: EntriesCallback, errorCallback?: ErrorCallback): void;
    removeRecursively(successCallback: VoidCallback, errorCallback?: ErrorCallback): void;
}
export interface DirectoryReader {
    readEntries(successCallback: EntriesCallback, errorCallback?: ErrorCallback): void;
}
export declare type DataType = "blob" | "buffer" | "arraybuffer" | "base64";
export interface FileEntry extends Entry {
    readonly size: number;
    createWriter(successCallback: FileWriterCallback, errorCallback?: ErrorCallback): void;
    file(successCallback: FileCallback, errorCallback?: ErrorCallback): void;
    readFile(successCallback: ContentCallback, errorCallback?: ErrorCallback, type?: DataType): void;
    writeFile(content: Blob | BufferSource | string, successCallback?: VoidCallback, errorCallback?: ErrorCallback): void;
    readText(successCallback: TextCallback, errorCallback?: ErrorCallback): void;
    writeText(test: string, successCallback?: VoidCallback, errorCallback?: ErrorCallback): void;
}
export interface FileSystemCallback {
    (filesystem: FileSystem): void;
}
export interface EntryCallback {
    (entry: Entry): void;
}
export interface FileEntryCallback {
    (entry: FileEntry): void;
}
export interface DirectoryEntryCallback {
    (entry: DirectoryEntry): void;
}
export interface EntriesCallback {
    (entries: Entry[]): void;
}
export interface MetadataCallback {
    (metadata: Metadata): void;
}
export interface URLCallback {
    (url: string): void;
}
export interface FileWriterCallback {
    (fileWriter: FileWriter): void;
}
export interface FileCallback {
    (file: File): void;
}
export interface ContentCallback {
    (content: Blob | BufferSource | string): void;
}
export interface TextCallback {
    (text: string): void;
}
export interface VoidCallback {
    (): void;
}
export interface ErrorCallback {
    (err: FileError): void;
}
declare global {
    interface Window extends LocalFileSystem {
        mozIndexedDB: any;
        msIndexedDB: any;
        webkitRequestFileSystem: any;
    }
    interface WorkerGlobalScope extends LocalFileSystem {
    }
}
//# sourceMappingURL=filesystem.d.ts.map