///
///
/**
* 表示一个 Zip 文件,支持压缩和解压,不支持分卷
* @see http://www.idea2ic.com/File_Formats/ZIP%20File%20Format%20Specification.pdf
*/
export declare class ZipFile {
/** 所有 Zip 文件项 */
readonly entries: ZipEntry[];
/** 文件注释 */
comment?: string;
/**
* 压缩当前文件
* @param password 使用的密码
*/
compress(password?: string | Buffer): Buffer;
/**
* 解析 Zip 二进制数据
* @param buffer 要读取的缓存
*/
static fromBuffer(buffer: Buffer): ZipFile;
/**
* 查找指定名称的项,如果找不到则返回 `undefined`
* @param fileName 文件名
*/
getEntry(fileName: string): ZipEntry;
/**
* 添加或覆盖项
* @param entry 项
*/
addEntry(entry: ZipEntry): void;
/**
* 删除指定的项,如果该项是文件夹则删除所有内部项
* @param fileName 项名
* @returns 如果已删除项则返回 `true`,如果项不存在返回 `false`
*/
deleteEntry(fileName: string): boolean;
/**
* 添加一个本地文件
* @param path 文件路径
* @param zipName Zip 内相对路径
* @param data 文件内容,如果为空则从硬盘读取
* @param stats 文件属性对象,如果为空则从硬盘读取
*/
addFile(path: string, zipName?: string, data?: Buffer, stats?: import("fs").Stats): ZipEntry;
/**
* 在 Zip 内部创建文件夹
* @param zipName Zip 内相对路径
*/
createDir(zipName: string): ZipEntry;
/**
* 添加一个本地文件夹
* @param path 文件路径
* @param zipName Zip 内相对路径
*/
addDir(path: string, zipName?: string): void;
/**
* 解压所有文件到文件夹
* @param directory 目标文件夹
* @param override 是否覆盖已有的文件
* @param password 解压的密码
*/
extractAll(directory: string, override: boolean, password?: string): number;
/**
* 异步压缩当前文件
* @param callback 压缩完成的回调函数
* @param onEntryStart 开始压缩项的回调函数
* @param onEntryEnd 结束压缩项的回调函数
* @param password 使用的密码
*/
compressAsync(callback: (buffer: Buffer) => void, onEntryStart?: (entry: ZipEntry, index: number) => void, onEntryEnd?: (entry: ZipEntry, index: number) => void, password?: string | Buffer): void;
/**
* 读取本地 Zip 文件
* @param path Zip 文件路径
*/
static fromFile(path: string): ZipFile;
}
/** 表示一个 Zip 文件内的一个文件或文件夹 */
export declare class ZipEntry {
/** 压缩工具版本 */
versionMadeBy: number;
/** 解压所需版本 */
version: number;
/** 标记位 */
flags: ZipEntryFlags;
/** 压缩方式 */
compressionMethod: ZipCompressionMethod;
/** 最后修改时间(原始格式) */
rawLastModifiedTime: number;
/** 最后修改时间 */
get lastModifiedTime(): Date;
set lastModifiedTime(value: Date);
/** 从压缩文件读取的 32 位数据校验码 */
orginalCRC?: number;
/** 从压缩文件读取的原始文件大小 */
orginalSize?: number;
/** 文件名 */
fileName: string;
/** 扩展区数据 */
extra?: Buffer;
/** 文件注释 */
comment?: string;
/** 分块索引 */
diskNumberStart: number;
/** 内部文件属性 */
internalFileAttributes: number;
/** 外部文件属性 */
fileAttributes: number;
/** 判断当前项是否是文件夹 */
get isDirectory(): boolean;
/** 压缩后的数据 */
private _compressedData?;
/** 压缩前的数据 */
private _data?;
/** 压缩后的数据 */
get compressedData(): Buffer;
set compressedData(value: Buffer);
/** 压缩前的数据 */
get data(): Buffer;
set data(value: Buffer);
/**
* 压缩当前文件
* @param password 密码
*/
compress(password?: string | Buffer): Buffer;
/**
* 异步压缩当前文件
* @param password 密码
* @param callback 解压完成后的回调
*/
compressAsync(password?: string | Buffer, callback?: (data: Buffer) => void): any;
/**
* 解压当前文件
* @param password 密码
*/
decompress(password?: string | Buffer): Buffer;
/**
* 异步解压当前文件
* @param password 密码
* @param callback 解压完成后的回调
*/
decompressAsync(password?: string | Buffer, callback?: (data: Buffer) => void): void;
/**
* 解压当前文件到指定文件夹
* @param directory 文件夹
* @param name 文件名
* @param overwrite 是否允许覆盖现有的目标
* @param password 密码
*/
extractTo(directory: string, name?: string, overwrite?: boolean, password?: string | Buffer): boolean;
}
/** 表示 Zip 文件项标记位 */
export declare const enum ZipEntryFlags {
/** 文件已加密 */
encrypted = 1,
/**
* 压缩附加选项1
* - 当压缩方法为 imploded,设置此标记位表示使用 8k 码表;否则表示使用 4k 码表
* - 当压缩方法为 deflated 或 enhancedDeflated,设置此标记位表示最快或最小,否则表示普通
*/
compressionOption1 = 2,
/**
* 压缩附加选项2
* - 当压缩方法为 imploded,设置此标记位表示使用 3 个香农-范诺编码树;否则表示使用 2 个
* - 当压缩方法为 deflated 或 enhancedDeflated,设置此标记位表示更快压缩,否则表示更小压缩
*/
compressionOption2 = 4,
/** CRC32 数据紧跟在压缩数据后,文件头对应位置为 0 */
immediateCRC = 8,
/** 使用增强压缩,仅当压缩方法为 deflated 时有效 */
enhancedDeflating = 16,
/** 已压缩的补丁数据 */
patched = 32,
/** 安全密钥加密,必须先设置 {@link ZipEntryFlags.encripted},当设置后解压所需版本至少为 50;如果使用 ASE 算法,则版本至少 51 */
strongEncryption = 64,
/** 文件名为 UTF8 编码 */
utf8 = 2048,
/** 使用增强加密压缩 */
enhancedCompression = 4096,
/** 加密目录信息 */
encryptedCentralDirectory = 8192
}
/** 表示 Zip 文件压缩方式 */
export declare const enum ZipCompressionMethod {
/** 仅存储不压缩 */
stored = 0,
/** 压缩 */
shrunk = 1,
/** 一倍压缩 */
reduced1 = 2,
/** 二倍压缩 */
reduced2 = 3,
/** 三倍压缩 */
reduced3 = 4,
/** 四倍压缩 */
reduced4 = 5,
/** 极限压缩 */
imploded = 6,
/** 使用 GZip 算法 */
deflated = 8,
/** 使用增强 GZip 算法 */
enhancedDeflated = 9,
/** 使用 Pkware 算法 */
pkware = 10,
/** 使用 Bzip2 算法 */
bzip2 = 12,
/** 使用 Lzma 算法 */
lzma = 14,
/** 使用 IBM Terse 算法 */
ibmTerse = 18,
/** 使用 IBM Lz77 算法 */
ibmLz77 = 19,
/** 使用 WinZIP AES 算法 */
aesEncrypt = 99
}
/**
* 计算数据的 32 位校验码
* @param buffer 要计算的缓存
*/
export declare function crc(buffer: Buffer): number;
/**
* 解压指定的 Zip 文件到文件夹
* @param path Zip 文件路径
* @param directory 目标文件夹,默认和文件同名
* @param override 是否覆盖已有的文件
* @param password 解压的密码
*/
export declare function extractZip(path: string, directory?: string, override?: boolean, password?: string): number;
/**
* 压缩指定的文件夹为 Zip 文件
* @param directory 目标文件夹
* @param path Zip 文件路径,默认和文件同名
* @param comment 文件注释
* @param password 压缩的密码
*/
export declare function compressFolder(directory: string, path?: string, comment?: string, password?: string): ZipFile;