/// <reference types="node" />
import { Writable } from 'stream';
/**
 * Zipper Entry Extra Field.
 */
export declare class ZipperEntryExtraField extends Object {
    /**
     * Type ID.
     */
    type: number;
    /**
     * Data for the type.
     */
    data: Buffer | null;
    constructor();
    /**
     * Encode type and data as buffer.
     *
     * @returns Buffer data.
     */
    toBuffer(): Buffer;
    /**
     * Init Info-ZIP UNIX type 2 data, local header.
     *
     * @param uid User ID.
     * @param gid Group ID.
     */
    initInfoZipUnix2Local(uid?: number, gid?: number): void;
    /**
     * Init Info-ZIP UNIX type 2 data, central header.
     *
     * @param uid User ID.
     * @param gid Group ID.
     */
    initInfoZipUnix2Central(uid?: number, gid?: number): void;
    /**
     * Init Extended Timestamp data, local header.
     *
     * @param mtime Modification time.
     * @param atime Access time.
     * @param ctime Creation time.
     */
    initExtendedTimestampLocal(mtime?: Readonly<Date> | number | null, atime?: Readonly<Date> | number | null, ctime?: Readonly<Date> | number | null): void;
    /**
     * Init Extended Timestamp data, central header.
     *
     * @param mtime Modification time.
     * @param atime Access time.
     * @param ctime Creation time.
     */
    initExtendedTimestampCentral(mtime?: Readonly<Date> | number | null, atime?: Readonly<Date> | number | null, ctime?: Readonly<Date> | number | null): void;
    /**
     * Init Info-ZIP UNIX type 2 data.
     *
     * @param local Local header or central.
     * @param uid User ID.
     * @param gid Group ID.
     */
    protected _initInfoZipUnix2(local: boolean, uid: number, gid: number): void;
    /**
     * Init Extended Timestamp data.
     *
     * @param local Local header or central.
     * @param mtime Modification time.
     * @param atime Access time.
     * @param ctime Creation time.
     */
    protected _initExtendedTimestamp(local: boolean, mtime: Readonly<Date> | number | null, atime: Readonly<Date> | number | null, ctime: Readonly<Date> | number | null): void;
}
/**
 * Zipper Entry.
 */
export declare class ZipperEntry extends Object {
    /**
     * Tag signature, local header.
     */
    signatureLocal: number;
    /**
     * Tag signature, central header.
     */
    signatureCentral: number;
    /**
     * Extract version.
     */
    extractVersion: number;
    /**
     * Extract host OS.
     */
    extractHostOS: number;
    /**
     * Create version.
     */
    createVersion: number;
    /**
     * Create host OS.
     */
    createHostOS: number;
    /**
     * Extract flags.
     */
    flags: number;
    /**
     * Compression type.
     */
    compression: number;
    /**
     * DOS time.
     */
    time: number;
    /**
     * DOS date.
     */
    date: number;
    /**
     * Data CRC32.
     */
    crc32: number;
    /**
     * Size compressed.
     */
    sizeCompressed: number;
    /**
     * Size uncompressed.
     */
    sizeUncompressed: number;
    /**
     * Disk number start.
     */
    diskNumberStart: number;
    /**
     * Internal attributes.
     */
    internalAttributes: number;
    /**
     * External attributes.
     */
    externalAttributes: number;
    /**
     * Header offset, local header.
     */
    headerOffsetLocal: number;
    /**
     * Entry path.
     */
    path: string;
    /**
     * Entry comment.
     */
    comment: string;
    /**
     * Extra fields, local header.
     */
    extraFieldsLocal: ZipperEntryExtraField[];
    /**
     * Extra fields, central header.
     */
    extraFieldsCentral: ZipperEntryExtraField[];
    constructor();
    /**
     * Create new ZipperEntryExtraField object.
     *
     * @returns ZipperEntryExtraField object.
     */
    createExtraField(): ZipperEntryExtraField;
    /**
     * Set date from a date object or timestamp.
     *
     * @param date Date object or timestamp.
     */
    setDate(date: Readonly<Date> | number): void;
    /**
     * Get path as data.
     *
     * @returns Path as data buffer.
     */
    getPathBuffer(): Buffer;
    /**
     * Get comment as data.
     *
     * @returns Comment as data buffer.
     */
    getCommentBuffer(): Buffer;
    /**
     * Get the file record extra fields as data.
     *
     * @returns Extra fields as data.
     */
    getExtraFieldsLocalBuffer(): Buffer;
    /**
     * Get the director entry extra fields as data.
     *
     * @returns Extra fields as data.
     */
    getExtraFieldsCentralBuffer(): Buffer;
    /**
     * Get file record data.
     *
     * @returns File record data.
     */
    getLocalBuffer(): Buffer;
    /**
     * Get directory entry data.
     *
     * @returns Directory entry data.
     */
    getCentralBuffer(): Buffer;
    /**
     * Setup data for entry.
     *
     * @param data Data for the entry.
     * @param compress Compress option, true to force, false to disable.
     * @returns Resulting data, or null if no data passed.
     */
    initData(data: Readonly<Buffer> | null, compress?: boolean | null): Promise<Buffer | null>;
    /**
     * Add extra fields for Extended Timestamp.
     *
     * @param mtime Modification time.
     * @param atime Access time.
     * @param ctime Creation time.
     */
    addExtraFieldsExtendedTimestamp(mtime?: Readonly<Date> | number | null, atime?: Readonly<Date> | number | null, ctime?: Readonly<Date> | number | null): void;
    /**
     * Add extra fields for Info-ZIP UNIX type 2.
     *
     * @param uid User ID.
     * @param gid Group ID.
     */
    addExtraFieldsInfoZipUnix2(uid?: number, gid?: number): void;
    /**
     * Convert date from a date object or timestamp.
     *
     * @param date Date object or timestamp.
     * @returns DOS time.
     */
    protected _dateToDosTime(date: Readonly<Date> | number): {
        date: number;
        time: number;
    };
    /**
     * Calculate the CRC32 hash for data.
     *
     * @param data Data to be hashed.
     * @returns CRC32 hash.
     */
    protected _bufferCrc32(data: Readonly<Buffer>): number;
    /**
     * Zlib deflate raw data.
     *
     * @param data Data to be compressed.
     * @returns Compressed data.
     */
    protected _zlibDeflateRaw(data: Readonly<Buffer>): Promise<Buffer>;
}
/**
 * Zipper, a low-level ZIP file writter.
 *
 * @param output Writable stream.
 */
export declare class Zipper extends Object {
    /**
     * Tag signature.
     */
    signature: number;
    /**
     * Archive comment.
     */
    comment: string;
    /**
     * Added entries.
     */
    entries: ZipperEntry[];
    /**
     * Current offset.
     */
    protected _offset: number;
    /**
     * Output stream.
     */
    protected readonly _output: Writable;
    constructor(output: Writable);
    /**
     * Create new ZipperEntry object.
     *
     * @returns ZipperEntry object.
     */
    createEntry(): ZipperEntry;
    /**
     * Get comment as data.
     *
     * @returns Comment data.
     */
    getCommentBuffer(): Buffer;
    /**
     * Get directory buffer data.
     *
     * @returns Directory data.
     */
    getDirectoryBuffer(): Buffer;
    /**
     * Add Entry and any associated data.
     *
     * @param entry Entry object.
     * @param data Data from the entry initData method.
     */
    addEntry(entry: ZipperEntry, data?: Readonly<Buffer> | null): Promise<void>;
    /**
     * Close stream.
     */
    close(): Promise<void>;
    /**
     * Write data buffer to output stream.
     *
     * @param data Data buffer.
     */
    protected _writeOutput(data: Readonly<Buffer>): Promise<void>;
}
