import { Dictionary } from '@aiot-toolkit/shared-utils'; import JSZip from 'jszip'; import IJavascriptCompileOption from '../../interface/IJavascriptCompileOption'; import IManifest from '../interface/IManifest'; import Package from '../model/Package'; /** * Zip 用于将打包成功的 build 目录按特定规则压缩成 rpk * * @see ZipUtil.createRpk 打包的完整规则 */ declare class ZipUtil { static readonly DIGEST_HASH_JSON = "hash.json"; static readonly META_PATH = "META-INF"; static readonly CERT_PATH: string; static readonly BUILD_FILE_PATH: string; /** * zip压缩参数 */ static readonly ZIP_OPTION: JSZip.JSZipGeneratorOptions; /** * dist 目录生成 rpk * 1. 获取文件列表 * 1. 过滤出需要的文件 * 2. 按配置排序 * 2. 生成文件流 * 1. 每个文件生成加密串 * 2. 生成元数据流 * 3. 把元数据流和普通文件合并到一个流 * 3. 写入到硬盘 * @param dist * @param param * @returns 生成的 rpk 文件名 */ static createRpk(dist: string, param: IJavascriptCompileOption): Promise; private static getFileName; private static packageToZipBuffer; /** * * @param buffer * @param param * @param fileName * * @returns 生成的文件名 */ private static generateDistFile; /** * 根据文件列表创建 zip 的 Buffer * @param fileList 文件列表 * @param comment zip 的注释 * @returns */ static createZipBufferFromFileList(fileList: { path: string; content: string | Buffer; }[], comment?: string): Promise; /** * 创建包,一个包对应一个 rpk 文件 * @param param * @param config * @param files * @returns */ static createPackagesDefinition(param: IJavascriptCompileOption, config: IManifest, files: string[]): Promise<{ fullPackage: Package; }>; /** * 获取有序的文件列表 * * 打包后的文件夹生成vela 应用程序,需要先把文件排序,再进行压缩 * * @see getPriorities 获取排序规则 * * @param dist 打包后的文件目录的绝对路径 * @param param 打包参数 * @param manifest manifest.json内容的json对象 * @returns */ static getSortedFiles(dist: string, param: IJavascriptCompileOption, manifest: IManifest): string[]; /** * 根据 **固定规则**、**manifest.json入口配置**,获取压缩文件时使用的排序规则 * * @param param * @returns */ private static getPriorities; /** * 创建打包的注释属性 */ static createComment(param: IJavascriptCompileOption): Dictionary; /** * 生成rpk的最终的Buffer * * @description 使用证书对原始rpk包的 buffer 签名. 签名失败,返回原始包; 签名成功,返回新包 * @param fullPackage 原始包 buffer * @param signConfig 证书信息 * @returns */ private static buildProjectAndOutput; } export default ZipUtil;