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
132 lines (131 loc) • 7.03 kB
JavaScript
/**
* ZIP Format Constants
*
* All values based on PKWARE APPNOTE.TXT specification.
* Byte arrays used for signature detection with bufferEquals().
* Decimal values used instead of octal literals for Node 0.8 compatibility.
*/ // =============================================================================
// Signatures (as byte arrays for bufferEquals - little-endian)
// =============================================================================
/** Local File Header signature: PK\x03\x04 (0x04034b50) */ export const SIG_LOCAL_FILE = [
0x50,
0x4b,
0x03,
0x04
];
/** Data Descriptor signature: PK\x07\x08 (0x08074b50) - optional */ export const SIG_DATA_DESCRIPTOR = [
0x50,
0x4b,
0x07,
0x08
];
/** Central Directory File Header signature: PK\x01\x02 (0x02014b50) */ export const SIG_CENTRAL_DIR = [
0x50,
0x4b,
0x01,
0x02
];
/** End of Central Directory signature: PK\x05\x06 (0x06054b50) */ export const SIG_END_OF_CENTRAL_DIR = [
0x50,
0x4b,
0x05,
0x06
];
/** ZIP64 End of Central Directory signature: PK\x06\x06 (0x06064b50) */ export const SIG_ZIP64_END_OF_CENTRAL_DIR = [
0x50,
0x4b,
0x06,
0x06
];
/** ZIP64 End of Central Directory Locator signature: PK\x06\x07 (0x07064b50) */ export const SIG_ZIP64_EOCD_LOCATOR = [
0x50,
0x4b,
0x06,
0x07
];
// =============================================================================
// Compression Methods
// =============================================================================
/** No compression - data stored as-is */ export const METHOD_STORE = 0;
/** DEFLATE compression (most common) */ export const METHOD_DEFLATE = 8;
/** BZIP2 compression (not supported) */ export const METHOD_BZIP2 = 12;
/** LZMA compression (not supported) */ export const METHOD_LZMA = 14;
// =============================================================================
// General Purpose Bit Flags
// =============================================================================
/** Bit 0: Entry is encrypted (traditional encryption) */ export const FLAG_ENCRYPTED = 1;
/** Bit 3: Data descriptor follows compressed data (sizes/CRC not in header) */ export const FLAG_DATA_DESCRIPTOR = 8;
/** Bit 6: Strong encryption / AES encryption (PKWARE) */ export const FLAG_STRONG_ENCRYPTION = 64;
/** Bit 11: Filename and comment are UTF-8 encoded */ export const FLAG_UTF8 = 2048;
// =============================================================================
// Extra Field Header IDs
// =============================================================================
/** ZIP64 Extended Information Extra Field */ export const EXTID_ZIP64 = 0x0001;
/** Info-ZIP Unix Extra Field (original/old) - contains atime, mtime, uid, gid */ export const EXTID_UNIX_OLD = 0x5855;
/** Info-ZIP New Unix Extra Field - variable length uid/gid */ export const EXTID_UNIX_NEW = 0x7875;
/** PKWARE Unix Extra Field */ export const EXTID_PKWARE_UNIX = 0x000d;
/** Extended Timestamp Extra Field */ export const EXTID_EXTENDED_TIMESTAMP = 0x5455;
/** ASi Unix Extra Field (contains mode with symlink bit) */ export const EXTID_ASI = 0x756e;
// =============================================================================
// Header Sizes (in bytes)
// =============================================================================
/** Local File Header fixed portion (before filename/extra) */ export const LOCAL_HEADER_FIXED_SIZE = 30;
/** Minimum bytes needed to detect any signature */ export const SIGNATURE_SIZE = 4;
/** Data Descriptor size without signature */ export const DATA_DESCRIPTOR_SIZE = 12;
/** Data Descriptor size with optional signature */ export const DATA_DESCRIPTOR_SIZE_WITH_SIG = 16;
/** ZIP64 Data Descriptor size without signature */ export const ZIP64_DATA_DESCRIPTOR_SIZE = 20;
/** ZIP64 Data Descriptor size with optional signature */ export const ZIP64_DATA_DESCRIPTOR_SIZE_WITH_SIG = 24;
// =============================================================================
// ZIP64 Markers
// =============================================================================
/** Marker value indicating ZIP64 extended info should be used (32-bit max) */ export const ZIP64_MARKER_32 = 0xffffffff;
/** Marker value indicating ZIP64 extended info should be used (16-bit max) */ export const ZIP64_MARKER_16 = 0xffff;
// =============================================================================
// Permission Constants (decimal equivalents of octal)
// =============================================================================
/** Read permission for all (0o0444 = r--r--r--) */ export const MODE_READ_ALL = 292;
/** Write permission for all (0o0222 = -w--w--w-) */ export const MODE_WRITE_ALL = 146;
/** Execute permission for all (0o0111 = --x--x--x) */ export const MODE_EXEC_ALL = 73;
/** Default file permissions (0o0644 = rw-r--r--) */ export const MODE_DEFAULT_FILE = 420;
/** Default directory permissions (0o0755 = rwxr-xr-x) */ export const MODE_DEFAULT_DIR = 493;
// =============================================================================
// Platform Codes (from version made by / version needed)
// =============================================================================
/** MS-DOS and OS/2 (FAT) */ export const PLATFORM_MSDOS = 0;
/** Unix */ export const PLATFORM_UNIX = 3;
/** NTFS (Windows NT) */ export const PLATFORM_NTFS = 10;
/** OS X (Darwin) */ export const PLATFORM_OSX = 19;
// Unix file type bits (S_IFMT mask = 0xF000)
export const S_IFLNK = 0xa000; // Symbolic link
export const S_IFDIR = 0x4000; // Directory
export const S_IFREG = 0x8000; // Regular file
// =============================================================================
// Unix File Type Bits (from external attributes >> 28)
// =============================================================================
/** Named pipe (FIFO) */ export const UNIX_TYPE_FIFO = 1;
/** Character device */ export const UNIX_TYPE_CHAR = 2;
/** Directory */ export const UNIX_TYPE_DIR = 4;
/** Block device */ export const UNIX_TYPE_BLOCK = 6;
/** Regular file */ export const UNIX_TYPE_FILE = 8;
/** Symbolic link */ export const UNIX_TYPE_SYMLINK = 10;
/** Socket */ export const UNIX_TYPE_SOCKET = 12;
// =============================================================================
// Error Codes
// =============================================================================
/** Error codes for programmatic error handling */ export const ZipErrorCode = {
INVALID_SIGNATURE: 'ZIP_INVALID_SIGNATURE',
CRC_MISMATCH: 'ZIP_CRC_MISMATCH',
UNSUPPORTED_METHOD: 'ZIP_UNSUPPORTED_METHOD',
ENCRYPTED_ENTRY: 'ZIP_ENCRYPTED_ENTRY',
TRUNCATED_ARCHIVE: 'ZIP_TRUNCATED_ARCHIVE',
SIZE_EXCEEDED: 'ZIP_SIZE_EXCEEDED',
INVALID_SIZE: 'ZIP_INVALID_SIZE',
BUFFER_OVERFLOW: 'ZIP_BUFFER_OVERFLOW'
};
/**
* Create an error with a code property
*/ export function createZipError(message, code) {
const err = new Error(message);
err.code = code;
return err;
}