// TypeScript Version: 2.1
///
import { EventEmitter } from "events";
import { Readable } from "stream";
// This class is not directly compatible with @types/yauzl 's ZipFile as this library changes the function signatures
// Therefore, it is replaced, albeit with a significant portion
export class ZipFile extends EventEmitter implements AsyncIterable {
/** This property can also be a Buffer if the option 'decodeStrings' is false */
comment: string;
entryCount: number;
entryCountIsCertain: boolean;
isOpen: boolean;
isZip64: boolean;
// These options do exist in the ZipFile class, but are not officially documented.
// Keeping them for backward compatibility with previous types version.
decodeStrings: boolean;
validateEntrySizes: boolean;
close(): Promise;
readEntry(): Promise;
readEntries(numEntries?: number): Promise;
openReadStream(entry: Entry, options?: ZipFileOptions): Promise;
[Symbol.asyncIterator](): AsyncIterator;
}
export interface ZipFileOptions {
decompress?: boolean | null | undefined;
decrypt?: boolean | null | undefined;
validateCrc32?: boolean | null | undefined;
start?: number | null | undefined;
end?: number | null | undefined;
}
export interface Options {
decodeStrings?: boolean | null | undefined;
validateEntrySizes?: boolean | null | undefined;
validateFilenames?: boolean | null | undefined;
strictFilenames?: boolean | null | undefined;
supportMacArchive?: boolean | null | undefined;
}
export class Entry {
/** This property can also be a Buffer if the option 'decodeStrings' is false */
comment: string;
compressedSize: number;
compressionMethod: number;
crc32: number;
externalFileAttributes: number;
extraFields: Array<{ id: number; data: Buffer }>;
fileDataOffset: null | number;
fileHeaderOffset: number;
/** This property can also be a Buffer if the option 'decodeStrings' is false */
filename: string;
filenameLength: number;
generalPurposeBitFlag: number;
internalFileAttributes: number;
lastModDate: number;
lastModTime: number;
uncompressedSize: number;
uncompressedSizeIsCertain: boolean;
versionMadeBy: number;
versionNeededToExtract: number;
getLastMod(): Date;
isEncrypted(): boolean;
isCompressed(): boolean;
openReadStream(options?: ZipFileOptions): Promise;
}
export abstract class Reader {
_createReadStream(start: number, length: number): Readable;
_read(start: number, length: number): Promise;
_open(): Promise<{}>;
_close(): Promise<{}>;
}
export function open(path: string, options?: Options): Promise;
export function fromFd(fd: number, options?: Options): Promise;
export function fromBuffer(buffer: Buffer, options?: Options): Promise;
export function fromReader(
reader: Reader,
totalSize: number,
options?: Options,
): Promise;
export function dosDateTimeToDate(date: number, time: number): Date;
export function validateFilename(filename: string): void;