import type { ZipTimestampMode } from "@archive/utils/timestamps";
import { type ArchiveSink } from "@archive/io/archive-sink";
import { type ArchiveSource } from "@archive/io/archive-source";
export interface ZipOptions {
    level?: number;
    timestamps?: ZipTimestampMode;
    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;
    /**
     * If true (default), automatically STORE incompressible data.
     * If false, always follow `level` (DEFLATE when level > 0).
     */
    smartStore?: boolean;
}
export interface ZipEntryOptions {
    level?: number;
    modTime?: Date;
    comment?: string;
}
export declare class ZipArchive {
    private readonly _options;
    private readonly _entries;
    private _sealed;
    constructor(options?: ZipOptions);
    add(name: string, source: ArchiveSource, options?: ZipEntryOptions): this;
    stream(): AsyncIterable<Uint8Array>;
    bytes(): Promise<Uint8Array>;
    bytesSync(): Uint8Array;
    pipeTo(sink: ArchiveSink): Promise<void>;
}
export declare function zip(options?: ZipOptions): ZipArchive;
