@honor-minigame/cli
Version:
honor minigame pack cli
91 lines (79 loc) • 2.33 kB
JavaScript
import { createZipBufferFromFileList } from "../common/ziputil.js"
import { signZipBufferForPackage } from "../sign/index.js"
import {
createPackagesDefinition,
allocateResourceToPackages,
createZipBufferForPackage,
} from "../subpackages/index.js"
/**
* 编译项目产出文件
* @param {Package} fullPackage
* @param {Package[]} subPackages
* @param {object} signConfig
* @param {ArrayBuffer} signConfig.privatekey 私钥文件内容
* @param {ArrayBuffer} signConfig.certificate 公钥文件内容
*/
async function buildProjectAndOutput(fullPackage, subPackages, signConfig) {
// 生成整包rpk
let fullPackageBuffer = await createZipBufferForPackage(fullPackage)
// 生成子包rpk
let subPackageBuffers = await Promise.all(
(subPackages || []).map((subPackageItem) =>
createZipBufferForPackage(subPackageItem)
)
)
// 是否需要增加签名逻辑
if (signConfig) {
const { privatekey, certificate } = signConfig
fullPackageBuffer = await signZipBufferForPackage(
fullPackageBuffer,
privatekey,
certificate
)
subPackageBuffers = await Promise.all(
subPackageBuffers.map((item) =>
signZipBufferForPackage(item, privatekey, certificate)
)
)
}
// 生成rpk:不需要META和签名
let subRpkBuffer = null
if (subPackageBuffers.length) {
const rpksFileList = []
// // 添加整包
rpksFileList.push({
path: fullPackage.fileName,
content: fullPackageBuffer,
})
// 添加各个子包
subPackageBuffers.forEach((buffer, index) => {
const fileBuildPath = subPackages[index].fileName
rpksFileList.push({
path: fileBuildPath,
content: buffer,
})
})
subRpkBuffer = await createZipBufferFromFileList(
rpksFileList,
fullPackage.comment
)
if (signConfig) {
const { privatekey, certificate } = signConfig
subRpkBuffer = await signZipBufferForPackage(
subRpkBuffer,
privatekey,
certificate
)
}
}
return {
rpkBuffer: fullPackageBuffer,
subRpkBuffer,
}
}
export {
createPackagesDefinition,
allocateResourceToPackages,
createZipBufferForPackage,
buildProjectAndOutput,
}