UNPKG

@lyleunderwood/streaming-zipper

Version:

Memory-efficient streaming ZIP creation with automatic backpressure control. Supports parallel reading + sequential writing for both Web Streams and Node.js streams with ZIP64 support.

185 lines 5.62 kB
/** * ZIP file format structures and constants * Based on ZIP specification: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT */ export declare const ZIP_CONSTANTS: { readonly LOCAL_FILE_HEADER_SIGNATURE: 67324752; readonly CENTRAL_DIRECTORY_SIGNATURE: 33639248; readonly END_OF_CENTRAL_DIRECTORY_SIGNATURE: 101010256; readonly ZIP64_END_OF_CENTRAL_DIRECTORY_SIGNATURE: 101075792; readonly ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE: 117853008; readonly DATA_DESCRIPTOR_SIGNATURE: 134695760; readonly COMPRESSION_STORE: 0; readonly COMPRESSION_DEFLATE: 8; readonly FLAG_ENCRYPTED: 1; readonly FLAG_DATA_DESCRIPTOR: 8; readonly FLAG_UTF8: 2048; readonly ZIP64_LIMIT: 4294967295; readonly ZIP64_LIMIT_16: 65535; readonly ZIP64_EXTRA_FIELD_TYPE: 1; readonly VERSION_MADE_BY: 831; readonly VERSION_NEEDED_EXTRACT: 20; readonly VERSION_NEEDED_EXTRACT_ZIP64: 45; }; export interface ZipEntry { name: string; data: ReadableStream<Uint8Array> | NodeJS.ReadableStream; size?: number; lastModified?: Date; comment?: string; permissions?: number; crc32?: number; compressedSize?: number; uncompressedSize?: number; preCompressed?: boolean; } /** * Fast-path entry for STORE compression with pre-calculated CRC32 * Enables immediate streaming without buffering */ export interface FastPathStoreEntry extends ZipEntry { crc32: number; size: number; preCompressed?: false; } /** * Fast-path entry for pre-compressed DEFLATE data * Enables immediate streaming of already-compressed data */ export interface FastPathDeflateEntry extends ZipEntry { crc32: number; compressedSize: number; uncompressedSize: number; preCompressed: true; } /** * Type guard to check if entry is a fast-path STORE entry */ export declare function isFastPathStoreEntry(entry: ZipEntry): entry is FastPathStoreEntry; /** * Type guard to check if entry is a fast-path DEFLATE entry */ export declare function isFastPathDeflateEntry(entry: ZipEntry): entry is FastPathDeflateEntry; /** * Check if entry can use fast-path immediate streaming */ export declare function canUseFastPath(entry: ZipEntry, compressionMethod: 'store' | 'deflate'): boolean; export interface LocalFileHeader { signature: number; versionNeeded: number; flags: number; compressionMethod: number; lastModTime: number; lastModDate: number; crc32: number; compressedSize: number; uncompressedSize: number; filenameLength: number; extraFieldLength: number; filename: Uint8Array; extraField: Uint8Array; } export interface CentralDirectoryHeader { signature: number; versionMadeBy: number; versionNeeded: number; flags: number; compressionMethod: number; lastModTime: number; lastModDate: number; crc32: number; compressedSize: number; uncompressedSize: number; filenameLength: number; extraFieldLength: number; commentLength: number; diskNumber: number; internalAttributes: number; externalAttributes: number; localHeaderOffset: number; filename: Uint8Array; extraField: Uint8Array; comment: Uint8Array; } export interface EndOfCentralDirectory { signature: number; diskNumber: number; centralDirDisk: number; centralDirRecords: number; totalRecords: number; centralDirSize: number; centralDirOffset: number; commentLength: number; comment: Uint8Array; } export interface Zip64EndOfCentralDirectory { signature: number; recordSize: bigint; versionMadeBy: number; versionNeeded: number; diskNumber: number; centralDirDisk: number; centralDirRecords: bigint; totalRecords: bigint; centralDirSize: bigint; centralDirOffset: bigint; } export interface Zip64EndOfCentralDirectoryLocator { signature: number; zip64EndDisk: number; zip64EndOffset: bigint; totalDisks: number; } export interface DataDescriptor { signature?: number; crc32: number; compressedSize: number; uncompressedSize: number; } export interface Zip64DataDescriptor { signature?: number; crc32: number; compressedSize: bigint; uncompressedSize: bigint; } export interface Zip64ExtraField { type: number; size: number; uncompressedSize?: bigint; compressedSize?: bigint; localHeaderOffset?: bigint; diskNumber?: number; } /** * Converts a Date to DOS date/time format */ export declare function dateToDosDateTime(date: Date): { date: number; time: number; }; /** * Determines if ZIP64 format is needed based on sizes */ export declare function needsZip64(uncompressedSize: number | bigint, compressedSize: number | bigint, localHeaderOffset: number | bigint, centralDirSize: number | bigint, entryCount: number): boolean; /** * Creates a ZIP64 extra field */ export declare function createZip64ExtraField(uncompressedSize?: bigint, compressedSize?: bigint, localHeaderOffset?: bigint, diskNumber?: number): Uint8Array; /** * Constants for Unix file permissions and types */ export declare const UNIX_FILE_TYPES: { readonly REGULAR_FILE: 32768; readonly DIRECTORY: 16384; readonly SYMBOLIC_LINK: 40960; }; export declare const DEFAULT_PERMISSIONS: { readonly FILE: 420; readonly DIRECTORY: 493; readonly EXECUTABLE: 493; }; /** * Creates external attributes for ZIP entry with Unix permissions */ export declare function createExternalAttributes(permissions?: number, isDirectory?: boolean): number; //# sourceMappingURL=zip-format.d.ts.map