zip-iterator
Version:
Extract contents from zip archive type using an iterator API using streams or paths. Use stream interface and pipe transforms to add decompression algorithms
102 lines (101 loc) • 3.18 kB
text/typescript
/**
* ZIP Header Parsing
*
* Functions for parsing Local File Headers and Data Descriptors.
* All parsing is forward-only - no seeking required.
*/
export interface ExtraField {
id: number;
size: number;
data: Buffer;
}
export interface LocalFileHeader {
versionNeeded: number;
flags: number;
compressionMethod: number;
lastModTime: number;
lastModDate: number;
crc32: number;
compressedSize: number;
uncompressedSize: number;
fileNameLength: number;
extraFieldLength: number;
fileName: string;
extraFields: ExtraField[];
isEncrypted: boolean;
isStrongEncrypted: boolean;
hasDataDescriptor: boolean;
isUtf8: boolean;
isZip64: boolean;
mtime: Date;
headerSize: number;
}
export interface DataDescriptor {
crc32: number;
compressedSize: number;
uncompressedSize: number;
/** Total bytes consumed (including optional signature) */
size: number;
}
/**
* Check if buffer at offset contains Local File Header signature
*/
export declare function isLocalFileHeader(buf: Buffer, offset: number): boolean;
/**
* Check if buffer at offset contains Central Directory signature
* (indicates end of local file entries)
*/
export declare function isCentralDirectory(buf: Buffer, offset: number): boolean;
/**
* Check if buffer at offset contains Data Descriptor signature
*/
export declare function isDataDescriptor(buf: Buffer, offset: number): boolean;
/**
* Parse Local File Header from buffer
*
* @param buf - Buffer containing header data
* @param offset - Offset to start of header (at signature)
* @returns Parsed header or null if not enough data
*/
export declare function parseLocalFileHeader(buf: Buffer, offset: number): LocalFileHeader | null;
/**
* Parse extra fields from buffer
*
* Extra field format:
* Header ID (2 bytes) + Data Size (2 bytes) + Data (variable)
*/
export declare function parseExtraFields(buf: Buffer): ExtraField[];
/**
* Find extra field by ID
*/
export declare function findExtraField(fields: ExtraField[], id: number): ExtraField | null;
/**
* Parse Data Descriptor from buffer
*
* Data descriptors can appear with or without the optional signature.
* This function handles both cases.
*
* @param buf - Buffer containing descriptor data
* @param offset - Offset to start of descriptor
* @param isZip64 - Whether to expect 8-byte sizes
* @returns Parsed descriptor or null if not enough data
*/
export declare function parseDataDescriptor(buf: Buffer, offset: number, isZip64: boolean): DataDescriptor | null;
/**
* Decode MS-DOS date/time format to JavaScript Date
*
* MS-DOS date format (16 bits):
* Bits 0-4: Day (1-31)
* Bits 5-8: Month (1-12)
* Bits 9-15: Year (offset from 1980)
*
* MS-DOS time format (16 bits):
* Bits 0-4: Seconds/2 (0-29)
* Bits 5-10: Minutes (0-59)
* Bits 11-15: Hours (0-23)
*/
export declare function decodeDateTime(date: number, time: number): Date;
/**
* Get entry type from filename and external attributes
*/
export declare function getEntryType(fileName: string, externalAttributes: number, platform: number): 'file' | 'directory' | 'symlink' | 'link';