/**
 * ZIP file format encoder (single-buffer output)
 *
 * Implements ZIP file structure according to PKWARE's APPNOTE.TXT specification
 * https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
 *
 * This module focuses on producing a complete ZIP as a single Uint8Array.
 * For true streaming (push chunks while reading sources), use `zip()` / `ZipArchive.stream()`.
 */
import { type CompressOptions } from "@archive/compression/compress";
import { type ZipTimestampMode } from "@archive/utils/timestamps";
/**
 * ZIP file entry
 */
export interface ZipEntry {
    /** File name (can include directory path, use forward slashes) */
    name: string;
    /** File data (will be compressed unless level=0) */
    data: Uint8Array;
    /** Optional per-entry compression level override */
    level?: number;
    /** File modification time (optional, defaults to current time) */
    modTime?: Date;
    /** File comment (optional) */
    comment?: string;
}
/**
 * ZIP encoder options
 */
export interface ZipOptions extends CompressOptions {
    /** ZIP file comment (optional) */
    comment?: string;
    /**
     * Default modification time for entries that don't specify `modTime`.
     *
     * If you need stable output across runs, either pass this explicitly or use `reproducible: true`.
     */
    modTime?: Date;
    /**
     * If true, bias defaults toward reproducible output:
     * - default `modTime` becomes 1980-01-01 00:00:00 (local time)
     * - default `timestamps` becomes "dos" (no UTC extra field)
     */
    reproducible?: boolean;
    /**
     * Max number of entries to compress concurrently in `createZip()`.
     * This helps avoid zlib threadpool saturation / memory spikes with many files.
     *
     * Defaults to 4.
     */
    concurrency?: number;
    /**
     * If true (default), automatically STORE incompressible data.
     * If false, always follow `level` (DEFLATE when level > 0).
     */
    smartStore?: boolean;
    /**
     * Timestamp writing strategy.
     * - "dos": only write DOS date/time fields (smallest output)
     * - "dos+utc": also write UTC mtime in 0x5455 extra field
     */
    timestamps?: ZipTimestampMode;
}
/**
 * Create a ZIP file from entries (async)
 */
export declare function createZip(entries: ZipEntry[], options?: ZipOptions): Promise<Uint8Array>;
/**
 * Create a ZIP file from entries (sync)
 *
 * This is supported in both Node.js and browser builds.
 */
export declare function createZipSync(entries: ZipEntry[], options?: ZipOptions): Uint8Array;
