/// <reference types="node" />
import { BaseFileSystem, FileSystem, BFSCallback, FileSystemOptions } from '../core/file_system';
import { FileFlag } from '../core/file_flag';
import { File } from '../core/file';
import Stats from '../core/node_fs_stats';
/**
 * Configuration options for a HTTPRequest file system.
 */
export interface JSDelivrRequestOptions {
    dependency: string;
    version: string;
    preferXHR?: boolean;
}
export type JSDelivrMeta = {
    files: JSDelivrMetaFile[];
};
export interface JSDelivrMetaFile {
    name: string;
    hash: string;
    time: string;
    size: number;
}
/**
 * A simple filesystem backed by HTTP downloads. You must create a directory listing using the
 * `make_http_index` tool provided by BrowserFS.
 *
 * If you install BrowserFS globally with `npm i -g browserfs`, you can generate a listing by
 * running `make_http_index` in your terminal in the directory you would like to index:
 *
 * ```
 * make_http_index > index.json
 * ```
 *
 * Listings objects look like the following:
 *
 * ```json
 * {
 *   "home": {
 *     "jvilk": {
 *       "someFile.txt": null,
 *       "someDir": {
 *         // Empty directory
 *       }
 *     }
 *   }
 * }
 * ```
 *
 * *This example has the folder `/home/jvilk` with subfile `someFile.txt` and subfolder `someDir`.*
 */
export default class JSDelivrRequest extends BaseFileSystem implements FileSystem {
    private dependency;
    private version;
    static readonly Name = "JSDelivrRequest";
    static readonly Options: FileSystemOptions;
    /**
     * Construct an HTTPRequest file system backend with the given options.
     */
    static Create(opts: JSDelivrRequestOptions, cb: BFSCallback<JSDelivrRequest>): void;
    static isAvailable(): boolean;
    readonly prefixUrl: string;
    private _index;
    private _requestFileAsyncInternal;
    private _requestFileSizeAsyncInternal;
    private _requestFileSyncInternal;
    private _requestFileSizeSyncInternal;
    private constructor();
    empty(): void;
    getName(): string;
    diskSpace(path: string, cb: (total: number, free: number) => void): void;
    isReadOnly(): boolean;
    supportsLinks(): boolean;
    supportsProps(): boolean;
    supportsSynch(): boolean;
    /**
     * Special HTTPFS function: Preload the given file into the index.
     * @param [String] path
     * @param [BrowserFS.Buffer] buffer
     */
    preloadFile(path: string, buffer: Buffer): void;
    stat(path: string, isLstat: boolean, cb: BFSCallback<Stats>): void;
    statSync(path: string, isLstat: boolean): Stats;
    open(path: string, flags: FileFlag, mode: number, cb: BFSCallback<File>): void;
    openSync(path: string, flags: FileFlag, mode: number): File;
    readdir(path: string, cb: BFSCallback<string[]>): void;
    readdirSync(path: string): string[];
    /**
     * We have the entire file as a buffer; optimize readFile.
     */
    readFile(fname: string, encoding: string, flag: FileFlag, cb: BFSCallback<string | Buffer>): void;
    /**
     * Specially-optimized readfile.
     */
    readFileSync(fname: string, encoding: string, flag: FileFlag): any;
    private _getHTTPPath;
    /**
     * Asynchronously download the given file.
     */
    private _requestFileAsync;
    /**
     * Synchronously download the given file.
     */
    private _requestFileSync;
    /**
     * Only requests the HEAD content, for the file size.
     */
    private _requestFileSizeAsync;
    private _requestFileSizeSync;
}
