/// /// /** * 表示一个 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;