/// 
/// 
/// 
/// 
import { Libzip } from '@yarnpkg/libzip';
import { BigIntStats, Stats } from 'fs';
import { WatchOptions, WatchCallback, Watcher, StatOptions, StatSyncOptions } from './FakeFS';
import { FakeFS, MkdirOptions, RmdirOptions, WriteFileOptions, OpendirOptions } from './FakeFS';
import { Dirent, SymlinkType } from './FakeFS';
import { CreateReadStreamOptions, CreateWriteStreamOptions, BasePortableFakeFS, ExtractHintOptions, WatchFileOptions, WatchFileCallback, StatWatcher } from './FakeFS';
import { Filename, FSPath, PortablePath } from './path';
/**
 * Extracts the archive part (ending in the first instance of `extension`) from a path.
 *
 * The indexOf-based implementation is ~3.7x faster than a RegExp-based implementation.
 */
export declare const getArchivePart: (path: string, extension: string) => PortablePath | null;
export type ZipOpenFSOptions = {
    baseFs?: FakeFS;
    filter?: RegExp | null;
    libzip: Libzip | (() => Libzip);
    maxOpenFiles?: number;
    readOnlyArchives?: boolean;
    useCache?: boolean;
    /**
     * Maximum age in ms.
     * ZipFS instances are pruned from the cache if they aren't accessed within this amount of time.
     */
    maxAge?: number;
    /**
     * Which file extensions will be interpreted as zip files. Useful for supporting other formats
     * packaged as zips, such as .docx.
     *
     * If not provided, defaults to only accepting `.zip`.
     */
    fileExtensions?: Array | null;
};
export declare class ZipOpenFS extends BasePortableFakeFS {
    static openPromise(fn: (zipOpenFs: ZipOpenFS) => Promise, opts: ZipOpenFSOptions): Promise;
    private libzipFactory;
    private libzipInstance?;
    private get libzip();
    private readonly baseFs;
    private readonly zipInstances;
    private readonly fdMap;
    private nextFd;
    private readonly filter;
    private readonly maxOpenFiles;
    private readonly maxAge;
    private readonly readOnlyArchives;
    private readonly fileExtensions;
    private isZip;
    private notZip;
    private realPaths;
    constructor({ libzip, baseFs, filter, maxOpenFiles, readOnlyArchives, useCache, maxAge, fileExtensions }: ZipOpenFSOptions);
    getExtractHint(hints: ExtractHintOptions): boolean;
    getRealPath(): PortablePath;
    saveAndClose(): void;
    discardAndClose(): void;
    resolve(p: PortablePath): PortablePath;
    private remapFd;
    openPromise(p: PortablePath, flags: string, mode?: number): Promise;
    openSync(p: PortablePath, flags: string, mode?: number): number;
    opendirPromise(p: PortablePath, opts?: OpendirOptions): Promise>;
    opendirSync(p: PortablePath, opts?: OpendirOptions): import("./FakeFS").Dir;
    readPromise(fd: number, buffer: Buffer, offset: number, length: number, position: number): Promise;
    readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number;
    writePromise(fd: number, buffer: Buffer, offset?: number, length?: number, position?: number): Promise;
    writePromise(fd: number, buffer: string, position?: number): Promise;
    writeSync(fd: number, buffer: Buffer, offset?: number, length?: number, position?: number): number;
    writeSync(fd: number, buffer: string, position?: number): number;
    closePromise(fd: number): Promise;
    closeSync(fd: number): void;
    createReadStream(p: PortablePath | null, opts?: CreateReadStreamOptions): import("fs").ReadStream;
    createWriteStream(p: PortablePath | null, opts?: CreateWriteStreamOptions): import("fs").WriteStream;
    realpathPromise(p: PortablePath): Promise;
    realpathSync(p: PortablePath): PortablePath;
    existsPromise(p: PortablePath): Promise;
    existsSync(p: PortablePath): boolean;
    accessPromise(p: PortablePath, mode?: number): Promise;
    accessSync(p: PortablePath, mode?: number): void;
    statPromise(p: PortablePath): Promise;
    statPromise(p: PortablePath, opts: (StatOptions & {
        bigint?: false | undefined;
    }) | undefined): Promise;
    statPromise(p: PortablePath, opts: StatOptions & {
        bigint: true;
    }): Promise;
    statPromise(p: PortablePath, opts?: StatOptions): Promise;
    statSync(p: PortablePath): Stats;
    statSync(p: PortablePath, opts?: StatSyncOptions & {
        bigint?: false | undefined;
        throwIfNoEntry: false;
    }): Stats | undefined;
    statSync(p: PortablePath, opts: StatSyncOptions & {
        bigint: true;
        throwIfNoEntry: false;
    }): BigIntStats | undefined;
    statSync(p: PortablePath, opts?: StatSyncOptions & {
        bigint?: false | undefined;
    }): Stats;
    statSync(p: PortablePath, opts: StatSyncOptions & {
        bigint: true;
    }): BigIntStats;
    statSync(p: PortablePath, opts: StatSyncOptions & {
        bigint: boolean;
        throwIfNoEntry?: false | undefined;
    }): Stats | BigIntStats;
    fstatPromise(fd: number): Promise;
    fstatPromise(fd: number, opts: {
        bigint: true;
    }): Promise;
    fstatPromise(fd: number, opts?: {
        bigint: boolean;
    }): Promise;
    fstatSync(fd: number): Stats;
    fstatSync(fd: number, opts: {
        bigint: true;
    }): BigIntStats;
    fstatSync(fd: number, opts?: {
        bigint: boolean;
    }): BigIntStats | Stats;
    lstatPromise(p: PortablePath): Promise;
    lstatPromise(p: PortablePath, opts: (StatOptions & {
        bigint?: false | undefined;
    }) | undefined): Promise;
    lstatPromise(p: PortablePath, opts: StatOptions & {
        bigint: true;
    }): Promise;
    lstatSync(p: PortablePath): Stats;
    lstatSync(p: PortablePath, opts?: StatSyncOptions & {
        bigint?: false | undefined;
        throwIfNoEntry: false;
    }): Stats | undefined;
    lstatSync(p: PortablePath, opts: StatSyncOptions & {
        bigint: true;
        throwIfNoEntry: false;
    }): BigIntStats | undefined;
    lstatSync(p: PortablePath, opts?: StatSyncOptions & {
        bigint?: false | undefined;
    }): Stats;
    lstatSync(p: PortablePath, opts: StatSyncOptions & {
        bigint: true;
    }): BigIntStats;
    lstatSync(p: PortablePath, opts: StatSyncOptions & {
        bigint: boolean;
        throwIfNoEntry?: false | undefined;
    }): Stats | BigIntStats;
    fchmodPromise(fd: number, mask: number): Promise;
    fchmodSync(fd: number, mask: number): void;
    chmodPromise(p: PortablePath, mask: number): Promise;
    chmodSync(p: PortablePath, mask: number): void;
    fchownPromise(fd: number, uid: number, gid: number): Promise;
    fchownSync(fd: number, uid: number, gid: number): void;
    chownPromise(p: PortablePath, uid: number, gid: number): Promise;
    chownSync(p: PortablePath, uid: number, gid: number): void;
    renamePromise(oldP: PortablePath, newP: PortablePath): Promise;
    renameSync(oldP: PortablePath, newP: PortablePath): void;
    copyFilePromise(sourceP: PortablePath, destP: PortablePath, flags?: number): Promise;
    copyFileSync(sourceP: PortablePath, destP: PortablePath, flags?: number): void;
    appendFilePromise(p: FSPath, content: string | Buffer | ArrayBuffer | DataView, opts?: WriteFileOptions): Promise;
    appendFileSync(p: FSPath, content: string | Buffer | ArrayBuffer | DataView, opts?: WriteFileOptions): void;
    writeFilePromise(p: FSPath, content: string | Buffer | ArrayBuffer | DataView, opts?: WriteFileOptions): Promise;
    writeFileSync(p: FSPath, content: string | Buffer | ArrayBuffer | DataView, opts?: WriteFileOptions): void;
    unlinkPromise(p: PortablePath): Promise;
    unlinkSync(p: PortablePath): void;
    utimesPromise(p: PortablePath, atime: Date | string | number, mtime: Date | string | number): Promise;
    utimesSync(p: PortablePath, atime: Date | string | number, mtime: Date | string | number): void;
    mkdirPromise(p: PortablePath, opts?: MkdirOptions): Promise;
    mkdirSync(p: PortablePath, opts?: MkdirOptions): string | undefined;
    rmdirPromise(p: PortablePath, opts?: RmdirOptions): Promise;
    rmdirSync(p: PortablePath, opts?: RmdirOptions): void;
    linkPromise(existingP: PortablePath, newP: PortablePath): Promise;
    linkSync(existingP: PortablePath, newP: PortablePath): void;
    symlinkPromise(target: PortablePath, p: PortablePath, type?: SymlinkType): Promise;
    symlinkSync(target: PortablePath, p: PortablePath, type?: SymlinkType): void;
    readFilePromise(p: FSPath, encoding: 'utf8'): Promise;
    readFilePromise(p: FSPath, encoding?: string): Promise;
    readFileSync(p: FSPath, encoding: 'utf8'): string;
    readFileSync(p: FSPath, encoding?: string): Buffer;
    readdirPromise(p: PortablePath): Promise>;
    readdirPromise(p: PortablePath, opts: {
        withFileTypes: false;
    } | null): Promise>;
    readdirPromise(p: PortablePath, opts: {
        withFileTypes: true;
    }): Promise>;
    readdirPromise(p: PortablePath, opts: {
        withFileTypes: boolean;
    }): Promise | Array>;
    readdirSync(p: PortablePath): Array;
    readdirSync(p: PortablePath, opts: {
        withFileTypes: false;
    } | null): Array;
    readdirSync(p: PortablePath, opts: {
        withFileTypes: true;
    }): Array;
    readdirSync(p: PortablePath, opts: {
        withFileTypes: boolean;
    }): Array | Array;
    readlinkPromise(p: PortablePath): Promise;
    readlinkSync(p: PortablePath): PortablePath;
    truncatePromise(p: PortablePath, len?: number): Promise;
    truncateSync(p: PortablePath, len?: number): void;
    ftruncatePromise(fd: number, len?: number): Promise;
    ftruncateSync(fd: number, len?: number): void;
    watch(p: PortablePath, cb?: WatchCallback): Watcher;
    watch(p: PortablePath, opts: WatchOptions, cb?: WatchCallback): Watcher;
    watchFile(p: PortablePath, cb: WatchFileCallback): StatWatcher;
    watchFile(p: PortablePath, opts: WatchFileOptions, cb: WatchFileCallback): StatWatcher;
    unwatchFile(p: PortablePath, cb?: WatchFileCallback): void;
    private makeCallPromise;
    private makeCallSync;
    private findZip;
    private limitOpenFilesTimeout;
    private limitOpenFiles;
    private getZipPromise;
    private getZipSync;
}