@aiot-toolkit/aiotpack 2.0.1-alpha.11 → 2.0.1-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/compiler/javascript/JavascriptCompiler.d.ts +1 -0
- package/lib/compiler/javascript/JavascriptCompiler.js +20 -16
- package/lib/compiler/javascript/JavascriptCompiler.js.map +1 -1
- package/lib/compiler/javascript/JavascriptDefaultCompileOption.d.ts +1 -0
- package/lib/compiler/javascript/JavascriptDefaultCompileOption.js +5 -0
- package/lib/compiler/javascript/JavascriptDefaultCompileOption.js.map +1 -1
- package/lib/compiler/javascript/vela/model/Package.js +2 -2
- package/lib/compiler/javascript/vela/model/Package.js.map +1 -1
- package/lib/compiler/javascript/vela/utils/Jsc.d.ts +1 -1
- package/lib/compiler/javascript/vela/utils/Jsc.js +4 -5
- package/lib/compiler/javascript/vela/utils/Jsc.js.map +1 -1
- package/lib/compiler/javascript/vela/utils/UxCompileUtil.js +2 -2
- package/lib/compiler/javascript/vela/utils/UxCompileUtil.js.map +1 -1
- package/lib/compiler/javascript/vela/utils/ZipUtil.js +4 -4
- package/lib/compiler/javascript/vela/utils/ZipUtil.js.map +1 -1
- package/lib/compiler/javascript/vela/utils/signature/SignUtil.js +14 -10
- package/lib/compiler/javascript/vela/utils/signature/SignUtil.js.map +1 -1
- package/lib/config/UxConfig.d.ts +3 -3
- package/lib/config/UxConfig.js +13 -2
- package/lib/config/UxConfig.js.map +1 -1
- package/lib/followWorks/xts/entryTemplate.d.ts +2 -2
- package/lib/followWorks/xts/entryTemplate.js +61 -42
- package/lib/followWorks/xts/entryTemplate.js.map +1 -1
- package/lib/followWorks/xts/generateRpk.js +1 -1
- package/lib/followWorks/xts/generateRpk.js.map +1 -1
- package/lib/followWorks/xts/ts2wasm.js +3 -12
- package/lib/followWorks/xts/ts2wasm.js.map +1 -1
- package/lib/loader/ux/JsLoader.d.ts +9 -0
- package/lib/loader/ux/JsLoader.js +38 -0
- package/lib/loader/ux/JsLoader.js.map +1 -0
- package/lib/loader/ux/PngLoader.js +4 -7
- package/lib/loader/ux/PngLoader.js.map +1 -1
- package/lib/loader/xts/XtsLoader.js +3 -7
- package/lib/loader/xts/XtsLoader.js.map +1 -1
- package/lib/preWorks/xts/preInstall.js +4 -10
- package/lib/preWorks/xts/preInstall.js.map +1 -1
- package/lib/utils/PreWorkUtils.js +9 -4
- package/lib/utils/PreWorkUtils.js.map +1 -1
- package/lib/utils/ux/ManifestSchema.d.ts +3 -0
- package/lib/utils/ux/ManifestSchema.js +209 -0
- package/lib/utils/ux/ManifestSchema.js.map +1 -0
- package/lib/utils/ux/UxFileUtils.d.ts +21 -4
- package/lib/utils/ux/UxFileUtils.js +74 -3
- package/lib/utils/ux/UxFileUtils.js.map +1 -1
- package/lib/utils/ux/UxFollowWorks.js +14 -2
- package/lib/utils/ux/UxFollowWorks.js.map +1 -1
- package/lib/utils/ux/UxLoaderUtils.d.ts +1 -1
- package/lib/utils/ux/UxLoaderUtils.js +3 -7
- package/lib/utils/ux/UxLoaderUtils.js.map +1 -1
- package/lib/utils/ux/UxPreWorks.d.ts +10 -0
- package/lib/utils/ux/UxPreWorks.js +33 -0
- package/lib/utils/ux/UxPreWorks.js.map +1 -0
- package/lib/utils/xts/XtsFollowWorks.js +3 -10
- package/lib/utils/xts/XtsFollowWorks.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["compiler/javascript/vela/utils/signature/SignUtil.ts"],"names":[],"mappings":"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","file":"SignUtil.js","sourcesContent":["import ColorConsole2 from '@aiot-toolkit/shared-utils/lib/ColorConsole2'\nimport CommonUtil from '@aiot-toolkit/shared-utils/lib/utils/CommonUtil'\nimport FileUtil from '@aiot-toolkit/shared-utils/lib/utils/FileUtil'\nimport crypto from 'crypto'\nimport Fs from 'fs-extra'\nimport rs from 'jsrsasign'\nimport JSZip from 'jszip'\nimport Path from 'path'\nimport CompileMode from '../../../../enum/CompileMode'\nimport ICompileParam from '../../../../interface/ICompileParam'\nimport IJavascriptCompileOption from '../../../interface/IJavascriptCompileOption'\nimport { IChunk, IChunkOptions, IFileHash, IPartChunk } from '../../interface/IChunk'\nimport ZipUtil from '../ZipUtil'\nimport Base64 from './Base64'\nimport CRC32 from './CRC32'\nimport Signer from './Signer'\n\n/**\n * SignUtil\n */\nclass SignUtil {\n /**\n * 获取签名相关的配置内容\n * 1. ICompileParam参数中获取编译模式是否为release\n * 2. IJavascriptCompileOption参数中获取签名目录等内容\n * @param param\n */\n static getProjectSignConfig(param: ICompileParam & IJavascriptCompileOption) {\n const { mode, projectPath, signRoot } = param\n let signConfig\n let privatekeyPath\n let certificatePath\n switch (mode) {\n case CompileMode.DEVELOPMENT:\n privatekeyPath = Path.join(__dirname, 'pem', 'private.pem')\n certificatePath = Path.join(__dirname, 'pem', 'certificate.pem')\n break\n case CompileMode.PRODUCTION:\n privatekeyPath = Path.join(projectPath, signRoot, 'private.pem')\n certificatePath = Path.join(projectPath, signRoot, 'certificate.pem')\n break\n default:\n // 打印信息, 模式未定义\n ColorConsole2.error(`【SignUtil】Error: mode ${mode} undefined`)\n break\n }\n // 检查路径是否真实存在\n if (\n privatekeyPath &&\n certificatePath &&\n FileUtil.checkFilePath([privatekeyPath, certificatePath])\n ) {\n signConfig = {\n privatekey: Fs.readFileSync(privatekeyPath),\n certificate: Fs.readFileSync(certificatePath)\n }\n } else {\n // 报错, 抛出错误\n ColorConsole2.throw()\n }\n return signConfig\n }\n static async signZipBufferForPackage(zipBuffer: Buffer, privatekey: Buffer, certificate: Buffer) {\n // 1. 解压得到文件列表\n const zipInstWrap: any = await SignUtil.createFileListFromZipBuffer(zipBuffer)\n\n // 摘要map\n const fileDigestHash = []\n const fileList = []\n\n // 2. 如果包含META-INF/CERT,则对其解压,增加签名\n const metaBuffer = zipInstWrap.getFileBuffer(ZipUtil.CERT_PATH)\n if (metaBuffer) {\n const metaHash = {\n name: ZipUtil.DIGEST_HASH_JSON,\n hash: CommonUtil.calcDataDigest(metaBuffer)\n }\n\n const signedMetaBuffer = SignUtil.doSign(metaBuffer, [metaHash], privatekey, certificate)\n if (signedMetaBuffer === false) {\n // 报错,META-INF/CERT签名失败\n console.error('【SignUtil】error: META-INF/CERT signature failed')\n } else {\n fileList.push({\n path: ZipUtil.CERT_PATH,\n content: signedMetaBuffer\n })\n fileDigestHash.push({\n name: ZipUtil.CERT_PATH,\n hash: CommonUtil.calcDataDigest(signedMetaBuffer)\n })\n }\n }\n // 3. 对整个zip做签名\n const files = zipInstWrap.fileList\n files.filter(SignUtil.fileFilter).map((item: any) => {\n fileList.push(item)\n fileDigestHash.push({\n name: item.path,\n hash: CommonUtil.calcDataDigest(item.content)\n })\n })\n // 因为META变化,重新创建ZIP流\n const newZipBuffer = await ZipUtil.createZipBufferFromFileList(fileList, zipInstWrap.comment)\n // 对新ZIP流重新签名\n const signedZipBuffer = SignUtil.doSign(newZipBuffer, fileDigestHash, privatekey, certificate)\n\n return signedZipBuffer\n }\n /**\n * 根据ZIP流获取文件实例\n * @param zipBuffer\n * @returns\n */\n private static async createFileListFromZipBuffer(zipBuffer: Buffer) {\n const zipInst = await JSZip.loadAsync(zipBuffer, ZipUtil.ZIP_OPTION as JSZip.JSZipLoadOptions)\n async function iterator(filePath: string) {\n const content = await zipInst.files[filePath].async('nodebuffer')\n return {\n path: filePath,\n content\n }\n }\n\n const fileList = await Promise.all(Object.keys(zipInst.files).map(iterator))\n return {\n fileList,\n comment: (zipInst as any).comment,\n getFileBuffer(path: string) {\n const buffer = fileList.find((item) => item.path === path)\n let content\n if (buffer) {\n content = buffer.content\n }\n return content\n }\n }\n }\n /**\n * 为 zip buffer 签名,返回签名后的buffer\n * @param fileBuffer\n * @param files\n * @param privatekey\n * @param certificate\n */\n private static doSign(\n fileBuffer: Buffer,\n files: IFileHash[],\n privatekey: Buffer,\n certificate: Buffer\n ) {\n const result = SignUtil.unZipFiles(fileBuffer, files)\n if (!result) {\n return false\n }\n\n const [chunks] = result\n\n // 生成整体签名\n SignUtil.signChunk(chunks as IChunk, privatekey, certificate)\n // 写入zip文件\n const signContent = SignUtil.saveChunk(fileBuffer, chunks)\n\n return signContent\n }\n /**\n * 解析buffer\n * @param fileBuffer\n * @param files\n */\n private static unZipFiles(fileBuffer: Buffer, files: IFileHash[]) {\n // 1. 读取zip文件\n if (!fileBuffer || fileBuffer.length <= 4) {\n // 报错\n console.error('【SignUtil】Zip file open failed')\n return false\n }\n // 2. 检查文件格式是否正确\n const fileMagic = fileBuffer.readInt32LE(0)\n if (fileMagic !== 0x4034b50) {\n // 报错\n console.error('【SignUtil】Zip file format is wrong')\n return false\n }\n // 3. 解析数据块\n const chunks = SignUtil.parserZip(fileBuffer)\n chunks.options = { files }\n // 解析成功,生成签名块\n if (chunks.tag) {\n // 分别处理三个签名块\n Object.keys(chunks.sections).forEach((item) => {\n const chunk = chunks.sections[item as keyof typeof chunks.sections]\n SignUtil.processChunk(fileBuffer, chunk)\n })\n return [chunks, fileBuffer]\n }\n\n return false\n }\n /**\n * 解析ZIP 分解为数据块\n * @param fileBuffer\n */\n private static parserZip(fileBuffer: Buffer) {\n let chunk: IChunk = {\n signchunk: Buffer.from(''),\n tag: false,\n length: fileBuffer.length,\n options: {\n files: []\n },\n sections: {\n header: {\n tag: false,\n startIndex: 0,\n len: 0,\n previous: 0,\n sign: undefined\n },\n central: {\n tag: false,\n startIndex: 0,\n len: 0,\n previous: 0,\n sign: undefined\n },\n footer: {\n tag: false,\n startIndex: 0,\n len: 0,\n previous: 0,\n sign: undefined\n }\n }\n }\n // fileBuffer至少22个字节\n chunk.sections.footer = SignUtil.readEOCD(fileBuffer)\n if (chunk.sections.footer.tag) {\n chunk.sections.central = SignUtil.readCD(\n fileBuffer,\n chunk.sections.footer.previous,\n chunk.sections.footer.startIndex - chunk.sections.footer.previous\n )\n if (chunk.sections.central.tag) {\n chunk.sections.header = SignUtil.readFH(\n fileBuffer,\n chunk.sections.central.previous,\n chunk.sections.central.startIndex - chunk.sections.central.previous\n )\n if (chunk.sections.header.tag) {\n chunk.tag = true\n }\n }\n }\n return chunk\n }\n /**\n * 从后往前读取buffer,读取尾部buffer\n * @param buffer\n * @returns\n */\n private static readEOCD(buffer: Buffer) {\n let chunk!: IPartChunk\n if (buffer && buffer.length >= 22) {\n let offset = buffer.length - 22\n let tag\n // 从开始位置往前单个字节读取,检查\n while (offset >= 0) {\n tag = buffer.readInt32LE(offset)\n if (tag === 0x6054b50) {\n // 如果找到起始位置\n chunk = {\n tag: true,\n startIndex: offset,\n len: buffer.length - offset,\n previous: buffer.readInt32LE(offset + 16)\n }\n break\n }\n offset -= 1\n }\n }\n return chunk\n }\n /**\n * 读取中部buffer\n * @param buffer\n * @param offset\n * @param size\n */\n private static readCD(buffer: Buffer, offset: number, size: number) {\n let chunk!: IPartChunk\n if (buffer && buffer.length >= offset) {\n const tag = buffer.readInt32LE(offset)\n // 找到起始位置\n if (tag === 0x2014b50) {\n chunk = {\n tag: true,\n startIndex: offset,\n len: size,\n previous: buffer.readInt32LE(offset + 42)\n }\n }\n }\n return chunk\n }\n /**\n * 读取前部buffer\n * @param buffer\n * @param offset\n * @param size\n * @returns\n */\n private static readFH(buffer: Buffer, offset: number, size: number) {\n let chunk!: IPartChunk\n if (buffer && buffer.length >= offset) {\n const tag = buffer.readInt32LE(offset)\n // 找到起始位置\n if (tag === 0x4034b50) {\n chunk = {\n tag: true,\n startIndex: offset,\n len: size,\n previous: -1\n }\n }\n }\n return chunk\n }\n /**\n * 数据块hash\n * @param buffer\n * @param chunk\n */\n private static processChunk(buffer: Buffer, chunk: IPartChunk) {\n const cur = chunk.startIndex\n const end = chunk.startIndex + chunk.len\n // 取数据块对应的buffer内容\n const chk = buffer.subarray(cur, end)\n // 创建指定长度Buffer对象,并确保分配内存区域被清零\n const header = Buffer.alloc(5 + chunk.len)\n // 给第一个字节赋值\n header[0] = 0xa5\n // 从第二个字节位置开始填充,长度为4字节,填充内容为chk.length\n header.writeInt32LE(chk.length, 1)\n // 从第六个开始填充chk的内容\n chk.copy(header, 5)\n\n // 将buffer进行hash计算并存储到chunk对象上\n const signer = crypto.createHash('SHA256')\n signer.update(header)\n chunk.sign = signer.digest()\n }\n private static signChunk(chunks: IChunk, privatekey: Buffer, certificate: Buffer) {\n const { sections } = chunks\n\n // 二进制拼接每个块摘要\n let length = 5\n if (sections.header.sign) {\n length += sections.header.sign.length\n }\n if (sections.central.sign) {\n length += sections.central.sign.length\n }\n if (sections.footer.sign) {\n length += sections.footer.sign.length\n }\n const wholeData = Buffer.alloc(length)\n let offset = 0\n wholeData.writeInt8(0x5a, 0)\n wholeData.writeInt32LE(3, 1)\n offset += 5\n\n function writeBuffer(buf: Buffer) {\n buf.copy(wholeData, offset)\n offset += buf.length\n }\n\n sections.header.sign && writeBuffer(sections.header.sign)\n sections.central.sign && writeBuffer(sections.central.sign)\n sections.footer.sign && writeBuffer(sections.footer.sign)\n\n // 计算整体摘要\n const signer = crypto.createHash('SHA256')\n signer.update(wholeData)\n const signature = signer.digest()\n\n // 生成sign block, 计算block总长度, 向buf中考入数据\n const signchunk = SignUtil.makeSignChunk(chunks.options, signature, privatekey, certificate)\n chunks.signchunk = SignUtil.saveSignChunk(signchunk)\n }\n private static makeSignChunk(\n options: IChunkOptions,\n sign: Buffer,\n privatekey: Buffer,\n certificate: Buffer\n ) {\n // 提取公钥\n const cert = Buffer.from(Base64.unarmor(certificate))\n const c = new rs.X509()\n c.readCertPEM(certificate.toString())\n const pubKey = rs.KEYUTIL.getPEM((c as any).subjectPublicKeyRSA)\n // 摘要块\n const digestBuf = Buffer.alloc(sign.length + 12)\n digestBuf.writeInt32LE(sign.length + 8, 0)\n digestBuf.writeInt32LE(0x0103, 4)\n digestBuf.writeInt32LE(sign.length, 8)\n sign.copy(digestBuf, 12)\n const digestBlock = {\n len: digestBuf.length,\n buffer: digestBuf\n }\n\n // 证书块\n const certBuf = Buffer.alloc(cert.length + 4)\n certBuf.writeInt32LE(cert.length, 0)\n cert.copy(certBuf, 4)\n const certBlock = {\n len: certBuf.length,\n buffer: certBuf\n }\n\n // 签名数据\n const signdataBlock: { [key: string]: any } = {\n len: 12,\n digests: {\n size: 0,\n data: []\n },\n certs: {\n size: 0,\n data: []\n },\n additional: 0\n }\n\n signdataBlock.digests.data.push(digestBlock)\n signdataBlock.digests.size += digestBlock.len\n signdataBlock.len += digestBlock.len\n\n signdataBlock.certs.data.push(certBlock)\n signdataBlock.certs.size += certBlock.len\n signdataBlock.len += certBlock.len\n\n // 将public.pem转化为der\n const pubbuf = Buffer.from(Base64.unarmor(pubKey))\n const signBlock: { [key: string]: any } = {\n len: 16 + pubbuf.length,\n size: 12 + pubbuf.length,\n signdata: {\n size: 0,\n buffer: null\n },\n signatures: {\n size: 0,\n data: []\n },\n pubkey: {\n size: pubbuf.length,\n buffer: pubbuf\n }\n }\n\n signBlock.signdata.buffer = SignUtil.makeSignDataBuffer(signdataBlock)\n signBlock.signdata.size = signdataBlock.len\n signBlock.size += signdataBlock.len\n signBlock.len += signdataBlock.len\n\n // 生成签名\n const signature = SignUtil.callCryptoSignFunction(\n signBlock.signdata.buffer,\n privatekey,\n certificate\n )\n const signatureBlock = {\n len: signature.length + 12,\n size: signature.length + 8,\n id: 0x0103,\n buffer: signature\n }\n signBlock.signatures.data.push(signatureBlock)\n signBlock.signatures.size += signatureBlock.len\n signBlock.size += signatureBlock.len\n signBlock.len += signatureBlock.len\n\n const signBlocks: any = {\n len: 4,\n size: 0,\n data: []\n }\n signBlocks.data.push(signBlock)\n signBlocks.size += signBlock.len\n signBlocks.len += signBlock.len\n\n // 生成key-value\n const kvBlock = {\n len: signBlocks.len + 12,\n size: signBlocks.len + 4,\n id: 0x01000101,\n value: signBlocks\n }\n\n const signchunk: any = {\n len: 32,\n size: 24,\n data: []\n }\n signchunk.data.push(kvBlock)\n signchunk.size += kvBlock.len\n signchunk.len += kvBlock.len\n\n // 添加文件列表hash kvblock\n if (options.files) {\n const filehashChunk = SignUtil.signFiles(options.files, privatekey, certificate)\n if (filehashChunk) {\n const filesignBlocks: any = {\n len: 4,\n size: 0,\n data: []\n }\n filesignBlocks.data.push(filehashChunk)\n filesignBlocks.size += filehashChunk.length\n filesignBlocks.len += filehashChunk.length\n\n const filekvBlock = {\n len: filesignBlocks.len + 12,\n size: filesignBlocks.len + 4,\n id: 0x01000201,\n value: filesignBlocks\n }\n\n signchunk.data.push(filekvBlock)\n signchunk.size += filekvBlock.len\n signchunk.len += filekvBlock.len\n }\n }\n\n return signchunk\n }\n private static makeSignDataBuffer(block: any) {\n const buffer = Buffer.alloc(block.len)\n let offset = 0\n\n buffer.writeInt32LE(block.digests.size, offset)\n offset += 4\n block.digests.data.forEach((item: any) => {\n item.buffer.copy(buffer, offset)\n offset += item.len\n })\n\n buffer.writeInt32LE(block.certs.size, offset)\n offset += 4\n block.certs.data.forEach((item: any) => {\n item.buffer.copy(buffer, offset)\n offset += item.len\n })\n\n buffer.writeInt32LE(block.additional, offset)\n return buffer\n }\n private static callCryptoSignFunction(buffer: any, prikey: Buffer, certpem: Buffer) {\n let signature = null\n if (!Signer.getRemoteCryptoSignFunction()) {\n // 使用默认\n signature = Signer.defaultCryptoSignFunction(buffer, prikey)\n } else {\n // 使用外部:传递原文件内容、证书内容\n const remoteCryptoSignFunction = Signer.getRemoteCryptoSignFunction()\n signature = remoteCryptoSignFunction(buffer, certpem)\n }\n return signature\n }\n /**\n * 加签名文件\n * @param filehashs\n * @param prikey\n * @param certpem\n */\n private static signFiles(filehashs: any, prikey: Buffer, certpem: Buffer) {\n const chunk: any = {\n len: 8,\n size: 4,\n digests: [],\n sign: null\n }\n // 生成hash块\n filehashs.forEach((item: any) => {\n // name hash\n const namehash = CRC32.digest(item.name)\n\n // 计算大小\n const sum = 6 + item.hash.length\n const chk = Buffer.alloc(sum)\n let offset = 0\n chk.writeInt32LE(namehash, offset)\n offset += 4\n\n chk.writeInt16LE(item.hash.length, offset)\n offset += 2\n item.hash.copy(chk, offset)\n offset += item.hash.length\n\n chunk.digests.push(chk)\n chunk.size += sum\n chunk.len += sum\n })\n\n // 生成整体签名\n SignUtil.signDigestChunk(chunk, prikey, certpem)\n\n // 写入文件\n return SignUtil.saveDigestChunk(chunk)\n }\n private static signDigestChunk(chunk: any, prikey: Buffer, certpem: Buffer) {\n const buf = Buffer.alloc(chunk.size)\n let offset = 0\n buf.writeInt32LE(0x0103, offset)\n offset += 4\n\n chunk.digests.forEach((chk: any) => {\n chk.copy(buf, offset)\n offset += chk.length\n })\n chunk.digests = buf.slice()\n\n // 生成签名\n const signature = SignUtil.callCryptoSignFunction(buf, prikey, certpem)\n\n chunk.sign = {\n len: 12 + signature.length,\n size: 8 + signature.length,\n id: 0x0103,\n data: signature\n }\n chunk.len += chunk.sign.len\n }\n private static saveDigestChunk(chunk: any) {\n // 创建新buffer\n const newBuffer = Buffer.alloc(chunk.len)\n\n let offset = 0\n newBuffer.writeInt32LE(chunk.size, offset)\n offset += 4\n\n // 文件hash列表\n chunk.digests.copy(newBuffer, offset)\n offset += chunk.digests.length\n\n // 写入签名\n newBuffer.writeInt32LE(chunk.sign.size, offset)\n offset += 4\n newBuffer.writeInt32LE(chunk.sign.id, offset)\n offset += 4\n newBuffer.writeInt32LE(chunk.sign.data.length, offset)\n offset += 4\n\n chunk.sign.data.copy(newBuffer, offset)\n offset += chunk.sign.data.length\n\n return newBuffer\n }\n private static readonly SigMagic = 'RPK Sig Block 42'\n private static saveSignChunk(signchunk: any) {\n const buffer = Buffer.alloc(signchunk.len)\n let offset = 0\n\n // 大小\n buffer.writeInt32LE(signchunk.size, offset)\n offset += 4\n buffer.writeInt32LE(0, offset)\n offset += 4\n\n // key-value\n signchunk.data.forEach((kv: any) => {\n buffer.writeInt32LE(kv.size, offset)\n offset += 4\n buffer.writeInt32LE(0, offset)\n offset += 4\n\n buffer.writeInt32LE(kv.id, offset)\n offset += 4\n\n // value\n buffer.writeInt32LE(kv.value.size, offset)\n offset += 4\n\n if (kv.id === 0x01000101) {\n // sign blocks\n kv.value.data.forEach((block: any) => {\n buffer.writeInt32LE(block.size, offset)\n offset += 4\n\n // signdata\n buffer.writeInt32LE(block.signdata.size, offset)\n offset += 4\n\n block.signdata.buffer.copy(buffer, offset)\n offset += block.signdata.buffer.length\n\n // signature\n buffer.writeInt32LE(block.signatures.size, offset)\n offset += 4\n\n block.signatures.data.forEach((signature: any) => {\n buffer.writeInt32LE(signature.size, offset)\n offset += 4\n\n buffer.writeInt32LE(signature.id, offset)\n offset += 4\n\n buffer.writeInt32LE(signature.buffer.length, offset)\n offset += 4\n\n signature.buffer.copy(buffer, offset)\n offset += signature.buffer.length\n })\n\n // pubkey\n buffer.writeInt32LE(block.pubkey.size, offset)\n offset += 4\n block.pubkey.buffer.copy(buffer, offset)\n offset += block.pubkey.buffer.length\n })\n } else if (kv.id === 0x01000201) {\n // files blocks\n kv.value.data.forEach((block: any) => {\n block.copy(buffer, offset)\n offset += block.length\n })\n }\n })\n\n // 大小\n buffer.writeInt32LE(signchunk.size, offset)\n offset += 4\n buffer.writeInt32LE(0, offset)\n offset += 4\n\n // 魔法值\n const magic = Buffer.from(SignUtil.SigMagic)\n magic.copy(buffer, offset)\n return buffer\n }\n private static saveChunk(buf: any, chunks: any) {\n // 创建新buffer\n const newBuffer = Buffer.alloc(buf.length + chunks.signchunk.length)\n let offset = 0\n const sections = chunks.sections\n\n // 拷贝header\n buf.copy(\n newBuffer,\n offset,\n sections.header.startIndex,\n sections.header.startIndex + sections.header.len\n )\n offset += sections.header.len\n\n // 拷贝signblock\n chunks.signchunk.copy(newBuffer, offset)\n offset += chunks.signchunk.length\n\n // 拷贝central\n buf.copy(\n newBuffer,\n offset,\n sections.central.startIndex,\n sections.central.startIndex + sections.central.len\n )\n\n offset += sections.central.len\n\n // 修改eocd\n buf.writeInt32LE(\n sections.central.startIndex + chunks.signchunk.length,\n sections.footer.startIndex + 16\n )\n // 拷贝eocd\n buf.copy(\n newBuffer,\n offset,\n sections.footer.startIndex,\n sections.footer.startIndex + sections.footer.len\n )\n offset += sections.footer.len\n\n return newBuffer\n }\n /**\n * 过滤掉文件夹和META文件\n * @param item\n * @returns\n */\n private static fileFilter(item: any) {\n const path = item.path\n return !path.endsWith('/') && path !== ZipUtil.CERT_PATH\n }\n}\nexport default SignUtil\n"],"sourceRoot":"../../../../../../src"}
|
|
1
|
+
{"version":3,"sources":["compiler/javascript/vela/utils/signature/SignUtil.ts"],"names":[],"mappings":"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","file":"SignUtil.js","sourcesContent":["import ColorConsole from '@aiot-toolkit/shared-utils/lib/ColorConsole'\nimport CommonUtil from '@aiot-toolkit/shared-utils/lib/utils/CommonUtil'\nimport FileUtil from '@aiot-toolkit/shared-utils/lib/utils/FileUtil'\nimport crypto from 'crypto'\nimport Fs from 'fs-extra'\nimport rs from 'jsrsasign'\nimport JSZip from 'jszip'\nimport Path from 'path'\nimport CompileMode from '../../../../enum/CompileMode'\nimport ICompileParam from '../../../../interface/ICompileParam'\nimport IJavascriptCompileOption from '../../../interface/IJavascriptCompileOption'\nimport { IChunk, IChunkOptions, IFileHash, IPartChunk } from '../../interface/IChunk'\nimport ZipUtil from '../ZipUtil'\nimport Base64 from './Base64'\nimport CRC32 from './CRC32'\nimport Signer from './Signer'\n\n/**\n * SignUtil\n */\nclass SignUtil {\n /**\n * 获取签名相关的配置内容\n * 1. ICompileParam参数中获取编译模式是否为release\n * 2. IJavascriptCompileOption参数中获取签名目录等内容\n * @param param\n */\n static getProjectSignConfig(param: ICompileParam & IJavascriptCompileOption) {\n const { mode, projectPath, signRoot } = param\n let signConfig\n let privatekeyPath\n let certificatePath\n switch (mode) {\n case CompileMode.DEVELOPMENT:\n privatekeyPath = Path.join(__dirname, 'pem', 'private.pem')\n certificatePath = Path.join(__dirname, 'pem', 'certificate.pem')\n ColorConsole.info(`User debug signature is enabled by project build`)\n break\n case CompileMode.PRODUCTION:\n privatekeyPath = Path.join(projectPath, signRoot, 'private.pem')\n certificatePath = Path.join(projectPath, signRoot, 'certificate.pem')\n ColorConsole.info(`elease signature is enabled by project build`)\n break\n default:\n // 打印信息, 模式未定义\n ColorConsole.error(`Error: mode ${mode} undefined`)\n break\n }\n // 检查路径是否真实存在\n if (\n privatekeyPath &&\n certificatePath &&\n FileUtil.checkFilePath([privatekeyPath, certificatePath])\n ) {\n signConfig = {\n privatekey: Fs.readFileSync(privatekeyPath),\n certificate: Fs.readFileSync(certificatePath)\n }\n } else {\n // 抛出错误\n ColorConsole.throw()\n }\n return signConfig\n }\n static async signZipBufferForPackage(zipBuffer: Buffer, privatekey: Buffer, certificate: Buffer) {\n // 1. 解压得到文件列表\n const zipInstWrap: any = await SignUtil.createFileListFromZipBuffer(zipBuffer)\n\n // 摘要map\n const fileDigestHash = []\n const fileList = []\n\n // 2. 如果包含META-INF/CERT,则对其解压,增加签名\n const metaBuffer = zipInstWrap.getFileBuffer(ZipUtil.CERT_PATH)\n if (metaBuffer) {\n const metaHash = {\n name: ZipUtil.DIGEST_HASH_JSON,\n hash: CommonUtil.calcDataDigest(metaBuffer)\n }\n\n const signedMetaBuffer = SignUtil.doSign(metaBuffer, [metaHash], privatekey, certificate)\n if (signedMetaBuffer === false) {\n // META-INF/CERT签名失败\n ColorConsole.throw('META-INF/CERT signature failed')\n } else {\n fileList.push({\n path: ZipUtil.CERT_PATH,\n content: signedMetaBuffer\n })\n fileDigestHash.push({\n name: ZipUtil.CERT_PATH,\n hash: CommonUtil.calcDataDigest(signedMetaBuffer)\n })\n }\n }\n // 3. 对整个zip做签名\n const files = zipInstWrap.fileList\n files.filter(SignUtil.fileFilter).map((item: any) => {\n fileList.push(item)\n fileDigestHash.push({\n name: item.path,\n hash: CommonUtil.calcDataDigest(item.content)\n })\n })\n // 因为META变化,重新创建ZIP流\n const newZipBuffer = await ZipUtil.createZipBufferFromFileList(fileList, zipInstWrap.comment)\n // 对新ZIP流重新签名\n const signedZipBuffer = SignUtil.doSign(newZipBuffer, fileDigestHash, privatekey, certificate)\n if (signedZipBuffer === false) {\n // 签名失败\n ColorConsole.throw('package signature failed')\n }\n\n return signedZipBuffer\n }\n /**\n * 根据ZIP流获取文件实例\n * @param zipBuffer\n * @returns\n */\n private static async createFileListFromZipBuffer(zipBuffer: Buffer) {\n const zipInst = await JSZip.loadAsync(zipBuffer, ZipUtil.ZIP_OPTION as JSZip.JSZipLoadOptions)\n async function iterator(filePath: string) {\n const content = await zipInst.files[filePath].async('nodebuffer')\n return {\n path: filePath,\n content\n }\n }\n\n const fileList = await Promise.all(Object.keys(zipInst.files).map(iterator))\n return {\n fileList,\n comment: (zipInst as any).comment,\n getFileBuffer(path: string) {\n const buffer = fileList.find((item) => item.path === path)\n let content\n if (buffer) {\n content = buffer.content\n }\n return content\n }\n }\n }\n /**\n * 为 zip buffer 签名,返回签名后的buffer\n * @param fileBuffer\n * @param files\n * @param privatekey\n * @param certificate\n */\n private static doSign(\n fileBuffer: Buffer,\n files: IFileHash[],\n privatekey: Buffer,\n certificate: Buffer\n ) {\n const result = SignUtil.unZipFiles(fileBuffer, files)\n if (!result) {\n return false\n }\n\n const [chunks] = result\n\n // 生成整体签名\n SignUtil.signChunk(chunks as IChunk, privatekey, certificate)\n // 写入zip文件\n const signContent = SignUtil.saveChunk(fileBuffer, chunks)\n\n return signContent\n }\n /**\n * 解析buffer\n * @param fileBuffer\n * @param files\n */\n private static unZipFiles(fileBuffer: Buffer, files: IFileHash[]) {\n // 1. 读取zip文件\n if (!fileBuffer || fileBuffer.length <= 4) {\n ColorConsole.error('Zip file open failed')\n return false\n }\n // 2. 检查文件格式是否正确\n const fileMagic = fileBuffer.readInt32LE(0)\n if (fileMagic !== 0x4034b50) {\n ColorConsole.error('Zip file format is wrong')\n return false\n }\n // 3. 解析数据块\n const chunks = SignUtil.parserZip(fileBuffer)\n chunks.options = { files }\n // 解析成功,生成签名块\n if (chunks.tag) {\n // 分别处理三个签名块\n Object.keys(chunks.sections).forEach((item) => {\n const chunk = chunks.sections[item as keyof typeof chunks.sections]\n SignUtil.processChunk(fileBuffer, chunk)\n })\n return [chunks, fileBuffer]\n }\n\n return false\n }\n /**\n * 解析ZIP 分解为数据块\n * @param fileBuffer\n */\n private static parserZip(fileBuffer: Buffer) {\n let chunk: IChunk = {\n signchunk: Buffer.from(''),\n tag: false,\n length: fileBuffer.length,\n options: {\n files: []\n },\n sections: {\n header: {\n tag: false,\n startIndex: 0,\n len: 0,\n previous: 0,\n sign: undefined\n },\n central: {\n tag: false,\n startIndex: 0,\n len: 0,\n previous: 0,\n sign: undefined\n },\n footer: {\n tag: false,\n startIndex: 0,\n len: 0,\n previous: 0,\n sign: undefined\n }\n }\n }\n // fileBuffer至少22个字节\n chunk.sections.footer = SignUtil.readEOCD(fileBuffer)\n if (chunk.sections.footer.tag) {\n chunk.sections.central = SignUtil.readCD(\n fileBuffer,\n chunk.sections.footer.previous,\n chunk.sections.footer.startIndex - chunk.sections.footer.previous\n )\n if (chunk.sections.central.tag) {\n chunk.sections.header = SignUtil.readFH(\n fileBuffer,\n chunk.sections.central.previous,\n chunk.sections.central.startIndex - chunk.sections.central.previous\n )\n if (chunk.sections.header.tag) {\n chunk.tag = true\n }\n }\n }\n return chunk\n }\n /**\n * 从后往前读取buffer,读取尾部buffer\n * @param buffer\n * @returns\n */\n private static readEOCD(buffer: Buffer) {\n let chunk!: IPartChunk\n if (buffer && buffer.length >= 22) {\n let offset = buffer.length - 22\n let tag\n // 从开始位置往前单个字节读取,检查\n while (offset >= 0) {\n tag = buffer.readInt32LE(offset)\n if (tag === 0x6054b50) {\n // 如果找到起始位置\n chunk = {\n tag: true,\n startIndex: offset,\n len: buffer.length - offset,\n previous: buffer.readInt32LE(offset + 16)\n }\n break\n }\n offset -= 1\n }\n }\n return chunk\n }\n /**\n * 读取中部buffer\n * @param buffer\n * @param offset\n * @param size\n */\n private static readCD(buffer: Buffer, offset: number, size: number) {\n let chunk!: IPartChunk\n if (buffer && buffer.length >= offset) {\n const tag = buffer.readInt32LE(offset)\n // 找到起始位置\n if (tag === 0x2014b50) {\n chunk = {\n tag: true,\n startIndex: offset,\n len: size,\n previous: buffer.readInt32LE(offset + 42)\n }\n }\n }\n return chunk\n }\n /**\n * 读取前部buffer\n * @param buffer\n * @param offset\n * @param size\n * @returns\n */\n private static readFH(buffer: Buffer, offset: number, size: number) {\n let chunk!: IPartChunk\n if (buffer && buffer.length >= offset) {\n const tag = buffer.readInt32LE(offset)\n // 找到起始位置\n if (tag === 0x4034b50) {\n chunk = {\n tag: true,\n startIndex: offset,\n len: size,\n previous: -1\n }\n }\n }\n return chunk\n }\n /**\n * 数据块hash\n * @param buffer\n * @param chunk\n */\n private static processChunk(buffer: Buffer, chunk: IPartChunk) {\n const cur = chunk.startIndex\n const end = chunk.startIndex + chunk.len\n // 取数据块对应的buffer内容\n const chk = buffer.subarray(cur, end)\n // 创建指定长度Buffer对象,并确保分配内存区域被清零\n const header = Buffer.alloc(5 + chunk.len)\n // 给第一个字节赋值\n header[0] = 0xa5\n // 从第二个字节位置开始填充,长度为4字节,填充内容为chk.length\n header.writeInt32LE(chk.length, 1)\n // 从第六个开始填充chk的内容\n chk.copy(header, 5)\n\n // 将buffer进行hash计算并存储到chunk对象上\n const signer = crypto.createHash('SHA256')\n signer.update(header)\n chunk.sign = signer.digest()\n }\n private static signChunk(chunks: IChunk, privatekey: Buffer, certificate: Buffer) {\n const { sections } = chunks\n\n // 二进制拼接每个块摘要\n let length = 5\n if (sections.header.sign) {\n length += sections.header.sign.length\n }\n if (sections.central.sign) {\n length += sections.central.sign.length\n }\n if (sections.footer.sign) {\n length += sections.footer.sign.length\n }\n const wholeData = Buffer.alloc(length)\n let offset = 0\n wholeData.writeInt8(0x5a, 0)\n wholeData.writeInt32LE(3, 1)\n offset += 5\n\n function writeBuffer(buf: Buffer) {\n buf.copy(wholeData, offset)\n offset += buf.length\n }\n\n sections.header.sign && writeBuffer(sections.header.sign)\n sections.central.sign && writeBuffer(sections.central.sign)\n sections.footer.sign && writeBuffer(sections.footer.sign)\n\n // 计算整体摘要\n const signer = crypto.createHash('SHA256')\n signer.update(wholeData)\n const signature = signer.digest()\n\n // 生成sign block, 计算block总长度, 向buf中考入数据\n const signchunk = SignUtil.makeSignChunk(chunks.options, signature, privatekey, certificate)\n chunks.signchunk = SignUtil.saveSignChunk(signchunk)\n }\n private static makeSignChunk(\n options: IChunkOptions,\n sign: Buffer,\n privatekey: Buffer,\n certificate: Buffer\n ) {\n // 提取公钥\n const cert = Buffer.from(Base64.unarmor(certificate))\n const c = new rs.X509()\n c.readCertPEM(certificate.toString())\n const pubKey = rs.KEYUTIL.getPEM((c as any).subjectPublicKeyRSA)\n // 摘要块\n const digestBuf = Buffer.alloc(sign.length + 12)\n digestBuf.writeInt32LE(sign.length + 8, 0)\n digestBuf.writeInt32LE(0x0103, 4)\n digestBuf.writeInt32LE(sign.length, 8)\n sign.copy(digestBuf, 12)\n const digestBlock = {\n len: digestBuf.length,\n buffer: digestBuf\n }\n\n // 证书块\n const certBuf = Buffer.alloc(cert.length + 4)\n certBuf.writeInt32LE(cert.length, 0)\n cert.copy(certBuf, 4)\n const certBlock = {\n len: certBuf.length,\n buffer: certBuf\n }\n\n // 签名数据\n const signdataBlock: { [key: string]: any } = {\n len: 12,\n digests: {\n size: 0,\n data: []\n },\n certs: {\n size: 0,\n data: []\n },\n additional: 0\n }\n\n signdataBlock.digests.data.push(digestBlock)\n signdataBlock.digests.size += digestBlock.len\n signdataBlock.len += digestBlock.len\n\n signdataBlock.certs.data.push(certBlock)\n signdataBlock.certs.size += certBlock.len\n signdataBlock.len += certBlock.len\n\n // 将public.pem转化为der\n const pubbuf = Buffer.from(Base64.unarmor(pubKey))\n const signBlock: { [key: string]: any } = {\n len: 16 + pubbuf.length,\n size: 12 + pubbuf.length,\n signdata: {\n size: 0,\n buffer: null\n },\n signatures: {\n size: 0,\n data: []\n },\n pubkey: {\n size: pubbuf.length,\n buffer: pubbuf\n }\n }\n\n signBlock.signdata.buffer = SignUtil.makeSignDataBuffer(signdataBlock)\n signBlock.signdata.size = signdataBlock.len\n signBlock.size += signdataBlock.len\n signBlock.len += signdataBlock.len\n\n // 生成签名\n const signature = SignUtil.callCryptoSignFunction(\n signBlock.signdata.buffer,\n privatekey,\n certificate\n )\n const signatureBlock = {\n len: signature.length + 12,\n size: signature.length + 8,\n id: 0x0103,\n buffer: signature\n }\n signBlock.signatures.data.push(signatureBlock)\n signBlock.signatures.size += signatureBlock.len\n signBlock.size += signatureBlock.len\n signBlock.len += signatureBlock.len\n\n const signBlocks: any = {\n len: 4,\n size: 0,\n data: []\n }\n signBlocks.data.push(signBlock)\n signBlocks.size += signBlock.len\n signBlocks.len += signBlock.len\n\n // 生成key-value\n const kvBlock = {\n len: signBlocks.len + 12,\n size: signBlocks.len + 4,\n id: 0x01000101,\n value: signBlocks\n }\n\n const signchunk: any = {\n len: 32,\n size: 24,\n data: []\n }\n signchunk.data.push(kvBlock)\n signchunk.size += kvBlock.len\n signchunk.len += kvBlock.len\n\n // 添加文件列表hash kvblock\n if (options.files) {\n const filehashChunk = SignUtil.signFiles(options.files, privatekey, certificate)\n if (filehashChunk) {\n const filesignBlocks: any = {\n len: 4,\n size: 0,\n data: []\n }\n filesignBlocks.data.push(filehashChunk)\n filesignBlocks.size += filehashChunk.length\n filesignBlocks.len += filehashChunk.length\n\n const filekvBlock = {\n len: filesignBlocks.len + 12,\n size: filesignBlocks.len + 4,\n id: 0x01000201,\n value: filesignBlocks\n }\n\n signchunk.data.push(filekvBlock)\n signchunk.size += filekvBlock.len\n signchunk.len += filekvBlock.len\n }\n }\n\n return signchunk\n }\n private static makeSignDataBuffer(block: any) {\n const buffer = Buffer.alloc(block.len)\n let offset = 0\n\n buffer.writeInt32LE(block.digests.size, offset)\n offset += 4\n block.digests.data.forEach((item: any) => {\n item.buffer.copy(buffer, offset)\n offset += item.len\n })\n\n buffer.writeInt32LE(block.certs.size, offset)\n offset += 4\n block.certs.data.forEach((item: any) => {\n item.buffer.copy(buffer, offset)\n offset += item.len\n })\n\n buffer.writeInt32LE(block.additional, offset)\n return buffer\n }\n private static callCryptoSignFunction(buffer: any, prikey: Buffer, certpem: Buffer) {\n let signature = null\n if (!Signer.getRemoteCryptoSignFunction()) {\n // 使用默认\n signature = Signer.defaultCryptoSignFunction(buffer, prikey)\n } else {\n // 使用外部:传递原文件内容、证书内容\n const remoteCryptoSignFunction = Signer.getRemoteCryptoSignFunction()\n signature = remoteCryptoSignFunction(buffer, certpem)\n }\n return signature\n }\n /**\n * 加签名文件\n * @param filehashs\n * @param prikey\n * @param certpem\n */\n private static signFiles(filehashs: any, prikey: Buffer, certpem: Buffer) {\n const chunk: any = {\n len: 8,\n size: 4,\n digests: [],\n sign: null\n }\n // 生成hash块\n filehashs.forEach((item: any) => {\n // name hash\n const namehash = CRC32.digest(item.name)\n\n // 计算大小\n const sum = 6 + item.hash.length\n const chk = Buffer.alloc(sum)\n let offset = 0\n chk.writeInt32LE(namehash, offset)\n offset += 4\n\n chk.writeInt16LE(item.hash.length, offset)\n offset += 2\n item.hash.copy(chk, offset)\n offset += item.hash.length\n\n chunk.digests.push(chk)\n chunk.size += sum\n chunk.len += sum\n })\n\n // 生成整体签名\n SignUtil.signDigestChunk(chunk, prikey, certpem)\n\n // 写入文件\n return SignUtil.saveDigestChunk(chunk)\n }\n private static signDigestChunk(chunk: any, prikey: Buffer, certpem: Buffer) {\n const buf = Buffer.alloc(chunk.size)\n let offset = 0\n buf.writeInt32LE(0x0103, offset)\n offset += 4\n\n chunk.digests.forEach((chk: any) => {\n chk.copy(buf, offset)\n offset += chk.length\n })\n chunk.digests = buf.slice()\n\n // 生成签名\n const signature = SignUtil.callCryptoSignFunction(buf, prikey, certpem)\n\n chunk.sign = {\n len: 12 + signature.length,\n size: 8 + signature.length,\n id: 0x0103,\n data: signature\n }\n chunk.len += chunk.sign.len\n }\n private static saveDigestChunk(chunk: any) {\n // 创建新buffer\n const newBuffer = Buffer.alloc(chunk.len)\n\n let offset = 0\n newBuffer.writeInt32LE(chunk.size, offset)\n offset += 4\n\n // 文件hash列表\n chunk.digests.copy(newBuffer, offset)\n offset += chunk.digests.length\n\n // 写入签名\n newBuffer.writeInt32LE(chunk.sign.size, offset)\n offset += 4\n newBuffer.writeInt32LE(chunk.sign.id, offset)\n offset += 4\n newBuffer.writeInt32LE(chunk.sign.data.length, offset)\n offset += 4\n\n chunk.sign.data.copy(newBuffer, offset)\n offset += chunk.sign.data.length\n\n return newBuffer\n }\n private static readonly SigMagic = 'RPK Sig Block 42'\n private static saveSignChunk(signchunk: any) {\n const buffer = Buffer.alloc(signchunk.len)\n let offset = 0\n\n // 大小\n buffer.writeInt32LE(signchunk.size, offset)\n offset += 4\n buffer.writeInt32LE(0, offset)\n offset += 4\n\n // key-value\n signchunk.data.forEach((kv: any) => {\n buffer.writeInt32LE(kv.size, offset)\n offset += 4\n buffer.writeInt32LE(0, offset)\n offset += 4\n\n buffer.writeInt32LE(kv.id, offset)\n offset += 4\n\n // value\n buffer.writeInt32LE(kv.value.size, offset)\n offset += 4\n\n if (kv.id === 0x01000101) {\n // sign blocks\n kv.value.data.forEach((block: any) => {\n buffer.writeInt32LE(block.size, offset)\n offset += 4\n\n // signdata\n buffer.writeInt32LE(block.signdata.size, offset)\n offset += 4\n\n block.signdata.buffer.copy(buffer, offset)\n offset += block.signdata.buffer.length\n\n // signature\n buffer.writeInt32LE(block.signatures.size, offset)\n offset += 4\n\n block.signatures.data.forEach((signature: any) => {\n buffer.writeInt32LE(signature.size, offset)\n offset += 4\n\n buffer.writeInt32LE(signature.id, offset)\n offset += 4\n\n buffer.writeInt32LE(signature.buffer.length, offset)\n offset += 4\n\n signature.buffer.copy(buffer, offset)\n offset += signature.buffer.length\n })\n\n // pubkey\n buffer.writeInt32LE(block.pubkey.size, offset)\n offset += 4\n block.pubkey.buffer.copy(buffer, offset)\n offset += block.pubkey.buffer.length\n })\n } else if (kv.id === 0x01000201) {\n // files blocks\n kv.value.data.forEach((block: any) => {\n block.copy(buffer, offset)\n offset += block.length\n })\n }\n })\n\n // 大小\n buffer.writeInt32LE(signchunk.size, offset)\n offset += 4\n buffer.writeInt32LE(0, offset)\n offset += 4\n\n // 魔法值\n const magic = Buffer.from(SignUtil.SigMagic)\n magic.copy(buffer, offset)\n return buffer\n }\n private static saveChunk(buf: any, chunks: any) {\n // 创建新buffer\n const newBuffer = Buffer.alloc(buf.length + chunks.signchunk.length)\n let offset = 0\n const sections = chunks.sections\n\n // 拷贝header\n buf.copy(\n newBuffer,\n offset,\n sections.header.startIndex,\n sections.header.startIndex + sections.header.len\n )\n offset += sections.header.len\n\n // 拷贝signblock\n chunks.signchunk.copy(newBuffer, offset)\n offset += chunks.signchunk.length\n\n // 拷贝central\n buf.copy(\n newBuffer,\n offset,\n sections.central.startIndex,\n sections.central.startIndex + sections.central.len\n )\n\n offset += sections.central.len\n\n // 修改eocd\n buf.writeInt32LE(\n sections.central.startIndex + chunks.signchunk.length,\n sections.footer.startIndex + 16\n )\n // 拷贝eocd\n buf.copy(\n newBuffer,\n offset,\n sections.footer.startIndex,\n sections.footer.startIndex + sections.footer.len\n )\n offset += sections.footer.len\n\n return newBuffer\n }\n /**\n * 过滤掉文件夹和META文件\n * @param item\n * @returns\n */\n private static fileFilter(item: any) {\n const path = item.path\n return !path.endsWith('/') && path !== ZipUtil.CERT_PATH\n }\n}\nexport default SignUtil\n"],"sourceRoot":"../../../../../../src"}
|
package/lib/config/UxConfig.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { IFileLaneConfig } from 'file-lane';
|
|
2
2
|
import IJavascriptCompileOption from '../compiler/javascript/interface/IJavascriptCompileOption';
|
|
3
3
|
import AppUxLoader from '../loader/ux/AppUxLoader';
|
|
4
|
-
import
|
|
4
|
+
import JsLoader from '../loader/ux/JsLoader';
|
|
5
5
|
import UxLoader from '../loader/ux/UxLoader';
|
|
6
6
|
declare class UxConfig implements IFileLaneConfig<IJavascriptCompileOption> {
|
|
7
7
|
readonly projectPath: string;
|
|
8
8
|
constructor(projectPath: string);
|
|
9
9
|
exclude: RegExp[];
|
|
10
|
-
include: RegExp[];
|
|
11
10
|
get output(): string;
|
|
12
11
|
module: {
|
|
13
12
|
rules: ({
|
|
@@ -20,11 +19,12 @@ declare class UxConfig implements IFileLaneConfig<IJavascriptCompileOption> {
|
|
|
20
19
|
loader: (typeof UxLoader)[];
|
|
21
20
|
} | {
|
|
22
21
|
test: RegExp[];
|
|
23
|
-
loader: (typeof
|
|
22
|
+
loader: (typeof JsLoader)[];
|
|
24
23
|
exclude?: undefined;
|
|
25
24
|
})[];
|
|
26
25
|
};
|
|
27
26
|
preWorks: import("file-lane/lib/interface/IFileLaneConfig").PreWork<IJavascriptCompileOption>[];
|
|
28
27
|
followWorks: import("file-lane/lib/interface/IFileLaneConfig").FollowWork<IJavascriptCompileOption>[];
|
|
28
|
+
watchIgnores: RegExp[];
|
|
29
29
|
}
|
|
30
30
|
export default UxConfig;
|
package/lib/config/UxConfig.js
CHANGED
|
@@ -5,15 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const path_1 = __importDefault(require("path"));
|
|
7
7
|
const AppUxLoader_1 = __importDefault(require("../loader/ux/AppUxLoader"));
|
|
8
|
+
const JsLoader_1 = __importDefault(require("../loader/ux/JsLoader"));
|
|
8
9
|
const PngLoader_1 = __importDefault(require("../loader/ux/PngLoader"));
|
|
9
10
|
const UxLoader_1 = __importDefault(require("../loader/ux/UxLoader"));
|
|
10
11
|
const PreWorkUtils_1 = __importDefault(require("../utils/PreWorkUtils"));
|
|
11
12
|
const UxFollowWorks_1 = __importDefault(require("../utils/ux/UxFollowWorks"));
|
|
13
|
+
const UxPreWorks_1 = __importDefault(require("../utils/ux/UxPreWorks"));
|
|
12
14
|
class UxConfig {
|
|
13
15
|
constructor(projectPath) {
|
|
14
16
|
this.projectPath = projectPath;
|
|
15
17
|
this.exclude = [/node_modules/, /dist/, /build/];
|
|
16
|
-
this.include = [/src/];
|
|
17
18
|
this.module = {
|
|
18
19
|
rules: [
|
|
19
20
|
{
|
|
@@ -25,13 +26,22 @@ class UxConfig {
|
|
|
25
26
|
exclude: [/app\.ux/],
|
|
26
27
|
loader: [UxLoader_1.default]
|
|
27
28
|
},
|
|
29
|
+
{
|
|
30
|
+
test: [/.+\.js$/],
|
|
31
|
+
loader: [JsLoader_1.default]
|
|
32
|
+
},
|
|
28
33
|
{
|
|
29
34
|
test: [/.+\.png/],
|
|
30
35
|
loader: [PngLoader_1.default]
|
|
31
36
|
}
|
|
32
37
|
]
|
|
33
38
|
};
|
|
34
|
-
this.preWorks = [
|
|
39
|
+
this.preWorks = [
|
|
40
|
+
UxPreWorks_1.default.validateManifest,
|
|
41
|
+
UxPreWorks_1.default.validateSitemap,
|
|
42
|
+
PreWorkUtils_1.default.clean,
|
|
43
|
+
PreWorkUtils_1.default.getEntries
|
|
44
|
+
];
|
|
35
45
|
this.followWorks = [
|
|
36
46
|
UxFollowWorks_1.default.symlinkNodeModule,
|
|
37
47
|
UxFollowWorks_1.default.webpack,
|
|
@@ -40,6 +50,7 @@ class UxConfig {
|
|
|
40
50
|
UxFollowWorks_1.default.toRpk,
|
|
41
51
|
UxFollowWorks_1.default.moveBackResult
|
|
42
52
|
];
|
|
53
|
+
this.watchIgnores = [/node_modules/];
|
|
43
54
|
}
|
|
44
55
|
get output() {
|
|
45
56
|
const name = path_1.default.basename(this.projectPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["config/UxConfig.ts"],"names":[],"mappings":";;;;;AACA,gDAAuB;AAEvB,2EAAkD;AAClD,uEAA8C;AAC9C,qEAA4C;AAC5C,yEAAgD;AAChD,8EAAqD;
|
|
1
|
+
{"version":3,"sources":["config/UxConfig.ts"],"names":[],"mappings":";;;;;AACA,gDAAuB;AAEvB,2EAAkD;AAClD,qEAA4C;AAC5C,uEAA8C;AAC9C,qEAA4C;AAC5C,yEAAgD;AAChD,8EAAqD;AACrD,wEAA+C;AAE/C,MAAM,QAAQ;IACZ,YAA4B,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;QAC/C,YAAO,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAO3C,WAAM,GAAG;YACP,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,CAAC,QAAQ,CAAC;oBAChB,MAAM,EAAE,CAAC,qBAAW,CAAC;iBACtB;gBACD;oBACE,IAAI,EAAE,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,MAAM,EAAE,CAAC,kBAAQ,CAAC;iBACnB;gBACD;oBACE,IAAI,EAAE,CAAC,SAAS,CAAC;oBACjB,MAAM,EAAE,CAAC,kBAAQ,CAAC;iBACnB;gBACD;oBACE,IAAI,EAAE,CAAC,SAAS,CAAC;oBACjB,MAAM,EAAE,CAAC,mBAAS,CAAC;iBACpB;aACF;SACF,CAAA;QACD,aAAQ,GAAG;YACT,oBAAU,CAAC,gBAAgB;YAC3B,oBAAU,CAAC,eAAe;YAC1B,sBAAY,CAAC,KAAK;YAClB,sBAAY,CAAC,UAAU;SACxB,CAAA;QAED,gBAAW,GAAG;YACZ,uBAAa,CAAC,iBAAiB;YAC/B,uBAAa,CAAC,OAAO;YACrB,uBAAa,CAAC,YAAY;YAC1B,uBAAa,CAAC,GAAG;YACjB,uBAAa,CAAC,KAAK;YACnB,uBAAa,CAAC,cAAc;SAC7B,CAAA;QACD,iBAAY,GAAG,CAAC,cAAc,CAAC,CAAA;IA5CmB,CAAC;IAEnD,IAAI,MAAM;QACR,MAAM,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,YAAY,IAAI,EAAE,CAAA;QACjC,OAAO,MAAM,CAAA;IACf,CAAC;CAuCF;AAED,kBAAe,QAAQ,CAAA","file":"UxConfig.js","sourcesContent":["import { IFileLaneConfig } from 'file-lane'\nimport Path from 'path'\nimport IJavascriptCompileOption from '../compiler/javascript/interface/IJavascriptCompileOption'\nimport AppUxLoader from '../loader/ux/AppUxLoader'\nimport JsLoader from '../loader/ux/JsLoader'\nimport PngLoader from '../loader/ux/PngLoader'\nimport UxLoader from '../loader/ux/UxLoader'\nimport PreWorkUtils from '../utils/PreWorkUtils'\nimport UxFollowWorks from '../utils/ux/UxFollowWorks'\nimport UxPreWorks from '../utils/ux/UxPreWorks'\n\nclass UxConfig implements IFileLaneConfig<IJavascriptCompileOption> {\n constructor(public readonly projectPath: string) {}\n exclude = [/node_modules/, /dist/, /build/]\n get output() {\n const name = Path.basename(this.projectPath)\n const result = `../.temp_${name}`\n return result\n }\n\n module = {\n rules: [\n {\n test: ['app.ux'],\n loader: [AppUxLoader]\n },\n {\n test: [/.+\\.ux$/],\n exclude: [/app\\.ux/],\n loader: [UxLoader]\n },\n {\n test: [/.+\\.js$/],\n loader: [JsLoader]\n },\n {\n test: [/.+\\.png/],\n loader: [PngLoader]\n }\n ]\n }\n preWorks = [\n UxPreWorks.validateManifest,\n UxPreWorks.validateSitemap,\n PreWorkUtils.clean,\n PreWorkUtils.getEntries\n ]\n\n followWorks = [\n UxFollowWorks.symlinkNodeModule,\n UxFollowWorks.webpack,\n UxFollowWorks.copyResource,\n UxFollowWorks.jsc,\n UxFollowWorks.toRpk,\n UxFollowWorks.moveBackResult\n ]\n watchIgnores = [/node_modules/]\n}\n\nexport default UxConfig\n"],"sourceRoot":"../../src"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FollowWork } from 'file-lane/lib/interface/IFileLaneConfig';
|
|
2
2
|
export interface Aspects {
|
|
3
3
|
path: string;
|
|
4
4
|
name: string;
|
|
@@ -18,4 +18,4 @@ export declare const XtsEntryFileName = "__entry__.ts";
|
|
|
18
18
|
* 生成 __entry__.ts 文件
|
|
19
19
|
* @param context
|
|
20
20
|
*/
|
|
21
|
-
export declare
|
|
21
|
+
export declare const generateEntryFile: FollowWork;
|
|
@@ -14,9 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.generateEntryFile = exports.XtsEntryFileName = exports.entryTemplate = void 0;
|
|
16
16
|
const Framework_1 = require("@aiot-toolkit/parser/lib/xts/enum/Framework");
|
|
17
|
-
const shared_utils_1 = require("@aiot-toolkit/shared-utils");
|
|
18
17
|
const ColorConsole_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/ColorConsole"));
|
|
19
|
-
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
20
18
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
21
19
|
const path_1 = __importDefault(require("path"));
|
|
22
20
|
const entryTemplate = (options) => {
|
|
@@ -41,20 +39,24 @@ const entryTemplate = (options) => {
|
|
|
41
39
|
for (let i = 0; i < aspects.length; i++) {
|
|
42
40
|
const aspect = aspects[i];
|
|
43
41
|
const { routes = [] } = aspect;
|
|
42
|
+
res += `
|
|
43
|
+
const aspectName_${i + 1} = '${aspect.name}'
|
|
44
|
+
const pathPages_${i + 1} = new Map()`;
|
|
44
45
|
for (let r = 0; r < routes.length; r++) {
|
|
45
46
|
const route = routes[r];
|
|
46
47
|
res += `
|
|
47
|
-
|
|
48
|
-
pathPages${i + 1}_${r + 1}.set('${route.route}', function (params?: ${Framework_1.HomeState.interface}${i + 1}_${r + 1}_): Page {
|
|
48
|
+
pathPages_${i + 1}.set('${route.route}', function (params?: ${Framework_1.HomeState.interface}${i + 1}_${r + 1}_): Page {
|
|
49
49
|
return new Page${i + 1}_${r + 1}(params)
|
|
50
50
|
})
|
|
51
|
-
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
res += `
|
|
52
54
|
const aspectDef_${i + 1}: AspectDefinition = {
|
|
53
55
|
newFn: (): ViewAspect => new AspectClass${i + 1}(),
|
|
54
|
-
pathPages:
|
|
56
|
+
pathPages: pathPages_${i + 1}
|
|
55
57
|
}
|
|
56
|
-
aspectDefs.set(aspectName_${i + 1}, aspectDef_${i + 1})
|
|
57
|
-
|
|
58
|
+
aspectDefs.set(aspectName_${i + 1}, aspectDef_${i + 1})
|
|
59
|
+
`;
|
|
58
60
|
}
|
|
59
61
|
return res;
|
|
60
62
|
}
|
|
@@ -110,57 +112,74 @@ export { entry, on }
|
|
|
110
112
|
`;
|
|
111
113
|
};
|
|
112
114
|
exports.entryTemplate = entryTemplate;
|
|
115
|
+
function getManifest(manifestPath) {
|
|
116
|
+
const content = fs_extra_1.default.readFileSync(manifestPath, 'utf-8');
|
|
117
|
+
const data = JSON.parse(content);
|
|
118
|
+
return data;
|
|
119
|
+
}
|
|
113
120
|
exports.XtsEntryFileName = '__entry__.ts';
|
|
114
121
|
/**
|
|
115
122
|
* 生成 __entry__.ts 文件
|
|
116
123
|
* @param context
|
|
117
124
|
*/
|
|
118
|
-
function generateEntryFile(context) {
|
|
119
|
-
var _a, _b
|
|
125
|
+
const generateEntryFile = function generateEntryFile(context, _, compilerOptions) {
|
|
126
|
+
var _a, _b;
|
|
120
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
121
128
|
const { projectPath, output } = context;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
if ((_a = compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.skip) === null || _a === void 0 ? void 0 : _a.includes('xts2ts')) {
|
|
130
|
+
ColorConsole_1.default.info(`### skip generate entry file due to --skip xts2ts}`);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
ColorConsole_1.default.info(`Generating entry file`);
|
|
134
|
+
const buildDir = path_1.default.resolve(projectPath, output);
|
|
135
|
+
const appManifestPath = path_1.default.join(buildDir, 'app', 'manifest.json');
|
|
136
|
+
const appManifest = getManifest(appManifestPath);
|
|
137
|
+
if (!appManifest) {
|
|
138
|
+
ColorConsole_1.default.throw('not find app/manifest.json file !');
|
|
130
139
|
}
|
|
131
|
-
const appTs =
|
|
132
|
-
if (appTs
|
|
133
|
-
ColorConsole_1.default.
|
|
140
|
+
const appTs = path_1.default.join(buildDir, 'app', 'app.ts');
|
|
141
|
+
if (!fs_extra_1.default.existsSync(appTs)) {
|
|
142
|
+
ColorConsole_1.default.throw('not find app/app.ts file !');
|
|
143
|
+
}
|
|
144
|
+
function relativeDist(tar) {
|
|
145
|
+
return path_1.default.join('.', path_1.default.relative(buildDir, tar)).replace(path_1.default.sep, '/');
|
|
134
146
|
}
|
|
135
147
|
let opt = {
|
|
136
|
-
appPath: relativeDist(appTs
|
|
148
|
+
appPath: relativeDist(appTs.replace('.ts', '')),
|
|
137
149
|
aspects: []
|
|
138
150
|
};
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
function getAspectRoutes(aspectPath) {
|
|
152
|
+
var _a;
|
|
153
|
+
const aspectManifestPath = path_1.default.join(aspectPath, 'src', 'manifest.json');
|
|
154
|
+
const aspectManifest = getManifest(aspectManifestPath);
|
|
155
|
+
if (!((_a = aspectManifest === null || aspectManifest === void 0 ? void 0 : aspectManifest.router) === null || _a === void 0 ? void 0 : _a.pages))
|
|
156
|
+
return [];
|
|
157
|
+
return Object.entries(aspectManifest.router.pages).map(([k, v]) => {
|
|
158
|
+
return {
|
|
159
|
+
importPath: relativeDist(path_1.default.resolve(path_1.default.dirname(aspectManifestPath), v.path)),
|
|
160
|
+
name: k,
|
|
161
|
+
route: v.path
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if ((_b = appManifest === null || appManifest === void 0 ? void 0 : appManifest.router) === null || _b === void 0 ? void 0 : _b.aspects) {
|
|
166
|
+
Object.entries(appManifest.router.aspects).forEach(([name, aspects]) => {
|
|
167
|
+
aspects.forEach((aspect) => {
|
|
168
|
+
var _a;
|
|
169
|
+
const aspectPath = path_1.default.join(buildDir, aspect.path);
|
|
170
|
+
(_a = opt.aspects) === null || _a === void 0 ? void 0 : _a.push({
|
|
171
|
+
name: name,
|
|
172
|
+
path: relativeDist(path_1.default.resolve(buildDir, aspect.path, 'src', 'aspect')),
|
|
173
|
+
routes: getAspectRoutes(aspectPath)
|
|
174
|
+
});
|
|
153
175
|
});
|
|
154
|
-
}
|
|
176
|
+
});
|
|
155
177
|
}
|
|
156
178
|
const template = (0, exports.entryTemplate)(opt);
|
|
157
179
|
fs_extra_1.default.writeFileSync(path_1.default.join(projectPath, output, exports.XtsEntryFileName), template);
|
|
158
|
-
ColorConsole_1.default.
|
|
159
|
-
level: shared_utils_1.LOG_LEVEL.Info,
|
|
160
|
-
message: `Entry file built`
|
|
161
|
-
});
|
|
180
|
+
ColorConsole_1.default.info(`entry file built`);
|
|
162
181
|
});
|
|
163
|
-
}
|
|
182
|
+
};
|
|
164
183
|
exports.generateEntryFile = generateEntryFile;
|
|
165
184
|
|
|
166
185
|
//# sourceMappingURL=entryTemplate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["followWorks/xts/entryTemplate.ts"],"names":[],"mappings":"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","file":"entryTemplate.js","sourcesContent":["import { HomeState, tsFrameWork } from '@aiot-toolkit/parser/lib/xts/enum/Framework'\nimport { LOG_LEVEL } from '@aiot-toolkit/shared-utils'\nimport ColorConsole from '@aiot-toolkit/shared-utils/lib/ColorConsole'\nimport FastGlob from 'fast-glob'\nimport { IFileLaneContext } from 'file-lane'\nimport Fs from 'fs-extra'\nimport Path from 'path'\nexport interface Aspects {\n path: string\n name: string\n routes?: {\n importPath: string\n name: string\n route: string\n }[]\n}\n\nexport interface GenerateEntryParams {\n appPath: string\n aspects?: Aspects[]\n}\n\nexport const entryTemplate = (options: GenerateEntryParams) => {\n const { aspects = [] } = options\n\n function generatImportAspects() {\n if (!aspects) return ''\n let imports = '// import aspects\\n'\n for (let i = 0; i < aspects.length; i++) {\n const aspect = aspects[i]\n imports += `import AspectClass${i + 1} from './${aspect.path}'\\n`\n const { routes = [] } = aspect\n for (let r = 0; r < routes?.length; r++) {\n const route = routes[r]\n imports += `import Page${i + 1}_${r + 1}, { ${HomeState.interface} as ${\n HomeState.interface\n }${i + 1}_${r + 1}_ } from './${route.importPath}'\\n`\n }\n }\n return imports\n }\n\n function generateDefs() {\n let res = '// aspects\\n'\n for (let i = 0; i < aspects.length; i++) {\n const aspect = aspects[i]\n const { routes = [] } = aspect\n for (let r = 0; r < routes.length; r++) {\n const route = routes[r]\n res += `\n const pathPages${i + 1}_${r + 1} = new Map()\n pathPages${i + 1}_${r + 1}.set('${route.route}', function (params?: ${HomeState.interface}${\n i + 1\n }_${r + 1}_): Page {\n return new Page${i + 1}_${r + 1}(params)\n })\n const aspectName_${i + 1} = '${aspect.name}'\n const aspectDef_${i + 1}: AspectDefinition = {\n newFn: (): ViewAspect => new AspectClass${i + 1}(),\n pathPages: pathPages${i + 1}_${r + 1}\n } \n aspectDefs.set(aspectName_${i + 1}, aspectDef_${i + 1})`\n }\n }\n\n return res\n }\n\n return `import {\n // class\n App,\n AppDefinition,\n AppContainer,\n AspectDefinition,\n ViewAspect,\n Page,\n Route,\n RouteInfo,\n // framework\n context,\n getInfoFromRoute,\n\n // export function\n on\n} from '../node_modules/${tsFrameWork.name}/index'\n\n// import app\nimport AppClass from './${options.appPath}'\n${generatImportAspects()}\nconsole.log('startApp-start timeEnd:', Date.now())\n\nfunction getAspectDefs() {\n const aspectDefs = new Map()\n ${generateDefs()}\n return aspectDefs\n}\n\nfunction entry(path: string): void {\n console.log('~~~~~~~~~entry path', path)\n const route: Route = { uri: path }\n const routeInfo: RouteInfo = getInfoFromRoute(route)\n // app\n let appName: string = ''\n if (routeInfo?.appName) appName = routeInfo.appName\n let app = context.getApp(appName)\n if (app === null) {\n const appDef: AppDefinition = {\n newFn: (): App => new AppClass()\n }\n const aspectDefs = getAspectDefs()\n app = new AppContainer(appDef, aspectDefs)\n }\n context.openApp(app, routeInfo)\n}\n\n// export api to native\nexport { entry, on }\n`\n}\n\nexport const XtsEntryFileName = '__entry__.ts'\n/**\n * 生成 __entry__.ts 文件\n * @param context\n */\nexport async function generateEntryFile(context: IFileLaneContext) {\n const { projectPath, output } = context\n ColorConsole.log({\n level: LOG_LEVEL.Info,\n message: `Generating entry file`\n })\n const dist = Path.resolve(projectPath, output)\n const manifests = await FastGlob(`${FastGlob.convertPathToPattern(dist)}/**/manifest.json`)\n\n function relativeDist(tar: string) {\n return Path.join('.', Path.relative(dist, tar)).replace(Path.sep, '/')\n }\n\n const appTs = await FastGlob(`${FastGlob.convertPathToPattern(dist)}/**/app.ts`)\n if (appTs.length !== 1) {\n ColorConsole.log({ level: LOG_LEVEL.Error, message: 'app.ts can only have one!' })\n }\n let opt: GenerateEntryParams = {\n appPath: relativeDist(appTs[0].replace('.ts', '')),\n aspects: []\n }\n\n for (const manifest of manifests) {\n const content = Fs.readFileSync(manifest, 'utf-8')\n const data = JSON.parse(content)\n if (data?.router?.pages) {\n opt.aspects?.push({\n name: data.name,\n path: relativeDist(Path.resolve(Path.dirname(manifest), 'aspect')),\n routes: Object.entries<{ path: string }>(data?.router?.pages).map(([k, v]) => {\n return {\n importPath: relativeDist(Path.resolve(Path.dirname(manifest), v.path)),\n name: k,\n route: v.path\n }\n })\n })\n }\n }\n\n const template = entryTemplate(opt)\n Fs.writeFileSync(Path.join(projectPath, output, XtsEntryFileName), template)\n ColorConsole.log({\n level: LOG_LEVEL.Info,\n message: `Entry file built`\n })\n}\n"],"sourceRoot":"../../../src"}
|
|
1
|
+
{"version":3,"sources":["followWorks/xts/entryTemplate.ts"],"names":[],"mappings":"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","file":"entryTemplate.js","sourcesContent":["import { HomeState, tsFrameWork } from '@aiot-toolkit/parser/lib/xts/enum/Framework'\nimport ColorConsole from '@aiot-toolkit/shared-utils/lib/ColorConsole'\nimport { IFileLaneContext } from 'file-lane'\nimport { FollowWork } from 'file-lane/lib/interface/IFileLaneConfig'\nimport fs from 'fs-extra'\nimport path from 'path'\nexport interface Aspects {\n path: string\n name: string\n routes?: {\n importPath: string\n name: string\n route: string\n }[]\n}\n\nexport interface GenerateEntryParams {\n appPath: string\n aspects?: Aspects[]\n}\n\nexport const entryTemplate = (options: GenerateEntryParams) => {\n const { aspects = [] } = options\n\n function generatImportAspects() {\n if (!aspects) return ''\n let imports = '// import aspects\\n'\n for (let i = 0; i < aspects.length; i++) {\n const aspect = aspects[i]\n imports += `import AspectClass${i + 1} from './${aspect.path}'\\n`\n const { routes = [] } = aspect\n for (let r = 0; r < routes?.length; r++) {\n const route = routes[r]\n imports += `import Page${i + 1}_${r + 1}, { ${HomeState.interface} as ${\n HomeState.interface\n }${i + 1}_${r + 1}_ } from './${route.importPath}'\\n`\n }\n }\n return imports\n }\n\n function generateDefs() {\n let res = '// aspects\\n'\n for (let i = 0; i < aspects.length; i++) {\n const aspect = aspects[i]\n const { routes = [] } = aspect\n res += `\n const aspectName_${i + 1} = '${aspect.name}'\n const pathPages_${i + 1} = new Map()`\n for (let r = 0; r < routes.length; r++) {\n const route = routes[r]\n res += `\n pathPages_${i + 1}.set('${route.route}', function (params?: ${HomeState.interface}${i + 1}_${\n r + 1\n }_): Page {\n return new Page${i + 1}_${r + 1}(params)\n })\n `\n }\n\n res += `\n const aspectDef_${i + 1}: AspectDefinition = {\n newFn: (): ViewAspect => new AspectClass${i + 1}(),\n pathPages: pathPages_${i + 1}\n } \n aspectDefs.set(aspectName_${i + 1}, aspectDef_${i + 1})\n `\n }\n\n return res\n }\n\n return `import {\n // class\n App,\n AppDefinition,\n AppContainer,\n AspectDefinition,\n ViewAspect,\n Page,\n Route,\n RouteInfo,\n // framework\n context,\n getInfoFromRoute,\n\n // export function\n on\n} from '../node_modules/${tsFrameWork.name}/index'\n\n// import app\nimport AppClass from './${options.appPath}'\n${generatImportAspects()}\nconsole.log('startApp-start timeEnd:', Date.now())\n\nfunction getAspectDefs() {\n const aspectDefs = new Map()\n ${generateDefs()}\n return aspectDefs\n}\n\nfunction entry(path: string): void {\n console.log('~~~~~~~~~entry path', path)\n const route: Route = { uri: path }\n const routeInfo: RouteInfo = getInfoFromRoute(route)\n // app\n let appName: string = ''\n if (routeInfo?.appName) appName = routeInfo.appName\n let app = context.getApp(appName)\n if (app === null) {\n const appDef: AppDefinition = {\n newFn: (): App => new AppClass()\n }\n const aspectDefs = getAspectDefs()\n app = new AppContainer(appDef, aspectDefs)\n }\n context.openApp(app, routeInfo)\n}\n\n// export api to native\nexport { entry, on }\n`\n}\n\nfunction getManifest(manifestPath: string) {\n const content = fs.readFileSync(manifestPath, 'utf-8')\n const data = JSON.parse(content)\n return data\n}\n\nexport const XtsEntryFileName = '__entry__.ts'\n/**\n * 生成 __entry__.ts 文件\n * @param context\n */\nexport const generateEntryFile: FollowWork = async function generateEntryFile(\n context: IFileLaneContext,\n _,\n compilerOptions\n) {\n const { projectPath, output } = context\n\n if (compilerOptions?.skip?.includes('xts2ts')) {\n ColorConsole.info(`### skip generate entry file due to --skip xts2ts}`)\n return\n }\n\n ColorConsole.info(`Generating entry file`)\n const buildDir = path.resolve(projectPath, output)\n const appManifestPath = path.join(buildDir, 'app', 'manifest.json')\n const appManifest = getManifest(appManifestPath)\n if (!appManifest) {\n ColorConsole.throw('not find app/manifest.json file !')\n }\n const appTs = path.join(buildDir, 'app', 'app.ts')\n if (!fs.existsSync(appTs)) {\n ColorConsole.throw('not find app/app.ts file !')\n }\n\n function relativeDist(tar: string) {\n return path.join('.', path.relative(buildDir, tar)).replace(path.sep, '/')\n }\n\n let opt: GenerateEntryParams = {\n appPath: relativeDist(appTs.replace('.ts', '')),\n aspects: []\n }\n\n function getAspectRoutes(aspectPath: string) {\n const aspectManifestPath = path.join(aspectPath, 'src', 'manifest.json')\n const aspectManifest = getManifest(aspectManifestPath)\n if (!aspectManifest?.router?.pages) return []\n\n return Object.entries<{ path: string }>(aspectManifest.router.pages).map(([k, v]) => {\n return {\n importPath: relativeDist(path.resolve(path.dirname(aspectManifestPath), v.path)),\n name: k,\n route: v.path\n }\n })\n }\n\n if (appManifest?.router?.aspects) {\n Object.entries<{ path: string }[]>(appManifest.router.aspects).forEach(([name, aspects]) => {\n aspects.forEach((aspect) => {\n const aspectPath = path.join(buildDir, aspect.path)\n opt.aspects?.push({\n name: name,\n path: relativeDist(path.resolve(buildDir, aspect.path, 'src', 'aspect')),\n routes: getAspectRoutes(aspectPath)\n })\n })\n })\n }\n\n const template = entryTemplate(opt)\n fs.writeFileSync(path.join(projectPath, output, XtsEntryFileName), template)\n ColorConsole.info(`entry file built`)\n}\n"],"sourceRoot":"../../../src"}
|
|
@@ -43,7 +43,7 @@ const ts2wasm_1 = require("./ts2wasm");
|
|
|
43
43
|
const generateRpk = (context, _, compilerOptions) => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
44
|
var _a;
|
|
45
45
|
if ((_a = compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.skip) === null || _a === void 0 ? void 0 : _a.includes('package')) {
|
|
46
|
-
ColorConsole_1.default.
|
|
46
|
+
ColorConsole_1.default.info(`### skip package due to --skip ${compilerOptions.skip.join(',')}`);
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
const manifestPath = path_1.default.resolve(context.projectPath, 'app', 'manifest.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["followWorks/xts/generateRpk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAuB;AACvB,oFAA2D;AAE3D,+FAAsE;AAEtE,uCAA2C;AAEpC,MAAM,WAAW,GAAmC,CAAO,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE;;IAC/F,IAAI,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,0CAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC9C,sBAAY,CAAC,
|
|
1
|
+
{"version":3,"sources":["followWorks/xts/generateRpk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAuB;AACvB,oFAA2D;AAE3D,+FAAsE;AAEtE,uCAA2C;AAEpC,MAAM,WAAW,GAAmC,CAAO,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE;;IAC/F,IAAI,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,0CAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC9C,sBAAY,CAAC,IAAI,CAAC,kCAAkC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACrF,OAAM;KACP;IACD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA;IAC9E,MAAM,QAAQ,GAAG,yBAAa,YAAY,uCAAC,CAAA;IAC3C,OAAO,wBAAc,CAAC,iBAAiB,CAAC,OAAO,EAAE;QAC/C,MAAM,EAAE,yBAAe;QACvB,WAAW,EAAE,QAAQ,CAAC,OAAO;KAC9B,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAXY,QAAA,WAAW,eAWvB","file":"generateRpk.js","sourcesContent":["import { FollowWork } from 'file-lane/lib/interface/IFileLaneConfig'\nimport path from 'path'\nimport XtsFollowWorks from '../../utils/xts/XtsFollowWorks'\n\nimport ColorConsole from '@aiot-toolkit/shared-utils/lib/ColorConsole'\nimport { IXtsCompileOptions } from '../../interface/ICompileOptions'\nimport { wasmPackageName } from './ts2wasm'\n\nexport const generateRpk: FollowWork<IXtsCompileOptions> = async (context, _, compilerOptions) => {\n if (compilerOptions?.skip?.includes('package')) {\n ColorConsole.info(`### skip package due to --skip ${compilerOptions.skip.join(',')}`)\n return\n }\n const manifestPath = path.resolve(context.projectPath, 'app', 'manifest.json')\n const manifest = await import(manifestPath)\n return XtsFollowWorks.defaultZipProject(context, {\n tarDir: wasmPackageName,\n packageName: manifest.package\n })\n}\n"],"sourceRoot":"../../../src"}
|
|
@@ -13,7 +13,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.ts2wasm = exports.wasmPackageName = void 0;
|
|
16
|
-
const shared_utils_1 = require("@aiot-toolkit/shared-utils");
|
|
17
16
|
const ColorConsole_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/ColorConsole"));
|
|
18
17
|
const child_process_1 = require("child_process");
|
|
19
18
|
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
@@ -38,22 +37,14 @@ const ts2wasm = (context, _, compilerOptions) => __awaiter(void 0, void 0, void
|
|
|
38
37
|
function compile() {
|
|
39
38
|
// TODO: 后续修改为 @mi
|
|
40
39
|
const ts2wasmpath = path_1.default.resolve(projectPath, 'node_modules', 'mi/wasmnizer-ts');
|
|
41
|
-
ColorConsole_1.default.
|
|
42
|
-
level: shared_utils_1.LOG_LEVEL.Info,
|
|
43
|
-
message: 'Waiting for generating app.wasm file.'
|
|
44
|
-
});
|
|
40
|
+
ColorConsole_1.default.info('### Waiting for generating app.wasm file.');
|
|
45
41
|
const res = (0, child_process_1.execSync)(`node ${ts2wasmpath}/build/cli/ts2wasm.js ${entryFile} -o ${wasmDir}/app.wasm`, {
|
|
46
42
|
encoding: 'utf-8'
|
|
47
43
|
});
|
|
48
|
-
ColorConsole_1.default.
|
|
49
|
-
level: shared_utils_1.LOG_LEVEL.Info,
|
|
50
|
-
message: res
|
|
51
|
-
});
|
|
44
|
+
ColorConsole_1.default.info(`### ts2wasm ### ${res.toString()}`);
|
|
52
45
|
}
|
|
53
46
|
if ((_a = compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.skip) === null || _a === void 0 ? void 0 : _a.includes('ts2wasm')) {
|
|
54
|
-
ColorConsole_1.default.
|
|
55
|
-
message: `skip compile ts to wasm due to --skip ${compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.skip.join(',')}`
|
|
56
|
-
});
|
|
47
|
+
ColorConsole_1.default.info(`### skip compile ts to wasm due to --skip ${compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.skip.join(',')}`);
|
|
57
48
|
}
|
|
58
49
|
else {
|
|
59
50
|
compile();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["followWorks/xts/ts2wasm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"sources":["followWorks/xts/ts2wasm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+FAAsE;AACtE,iDAAwC;AACxC,0DAA0B;AAE1B,4CAAmB;AACnB,gDAAuB;AAEvB,mDAAkD;AAErC,QAAA,eAAe,GAAG,cAAc,CAAA;AAE7C;;;GAGG;AACI,MAAM,OAAO,GAAmC,CAAO,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE;;IAC3F,wBAAwB;IACxB,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAEvC,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,gCAAgB,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,uBAAe,CAAC,CAAA;IAC1D,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE;QACpB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,SAAS,OAAO;QACd,kBAAkB;QAClB,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAA;QAChF,sBAAY,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QAE9D,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAClB,QAAQ,WAAW,0BAA0B,SAAS,OAAO,OAAO,WAAW,EAC/E;YACE,QAAQ,EAAE,OAAO;SAClB,CACF,CAAA;QACD,sBAAY,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,0CAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC9C,sBAAY,CAAC,IAAI,CACf,6CAA6C,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC/E,CAAA;KACF;SAAM;QACL,OAAO,EAAE,CAAA;KACV;IAED,gBAAgB;IAChB,qBAAqB;IACrB,MAAM,KAAK,GAAG,mBAAE,CAAC,IAAI,CAAC,GAAG,mBAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,MAAM,OAAO,EAAE;QAC9E,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,WAAW,CAAC;QACvF,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,EAAE,EAAE,IAAI,uBAAe,EAAE,CAAC,CAAA;QAChF,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAC7B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;KAC1B;IAED,gCAAgC;IAChC,YAAE,CAAC,YAAY,CACb,cAAI,CAAC,OAAO,CAAC,mBAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,EAClF,cAAI,CAAC,OAAO,CAAC,mBAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,uBAAe,EAAE,eAAe,CAAC,CACrF,CAAA;AACH,CAAC,CAAA,CAAA;AAtDY,QAAA,OAAO,WAsDnB","file":"ts2wasm.js","sourcesContent":["import ColorConsole from '@aiot-toolkit/shared-utils/lib/ColorConsole'\nimport { execSync } from 'child_process'\nimport fg from 'fast-glob'\nimport { FollowWork } from 'file-lane/lib/interface/IFileLaneConfig'\nimport fs from 'fs'\nimport path from 'path'\nimport { IXtsCompileOptions } from '../../interface/ICompileOptions'\nimport { XtsEntryFileName } from './entryTemplate'\n\nexport const wasmPackageName = 'wasmUnpacked'\n\n/**\n * 将 __entry__.ts 文件打包成 warm 文件\n * @param context\n */\nexport const ts2wasm: FollowWork<IXtsCompileOptions> = async (context, _, compilerOptions) => {\n /** 1. 生成 app.wasm 文件 */\n const { projectPath, output } = context\n\n const buildDir = path.resolve(projectPath, output)\n const entryFile = path.resolve(buildDir, XtsEntryFileName)\n const wasmDir = path.resolve(projectPath, wasmPackageName)\n fs.mkdirSync(wasmDir, {\n recursive: true\n })\n\n function compile() {\n // TODO: 后续修改为 @mi\n const ts2wasmpath = path.resolve(projectPath, 'node_modules', 'mi/wasmnizer-ts')\n ColorConsole.info('### Waiting for generating app.wasm file.')\n\n const res = execSync(\n `node ${ts2wasmpath}/build/cli/ts2wasm.js ${entryFile} -o ${wasmDir}/app.wasm`,\n {\n encoding: 'utf-8'\n }\n )\n ColorConsole.info(`### ts2wasm ### ${res.toString()}`)\n }\n\n if (compilerOptions?.skip?.includes('ts2wasm')) {\n ColorConsole.info(\n `### skip compile ts to wasm due to --skip ${compilerOptions?.skip.join(',')}`\n )\n } else {\n compile()\n }\n\n /** 2. 拷贝静态资源 */\n // TODO: ignore 数组待优化\n const files = fg.sync(`${fg.convertPathToPattern(projectPath)}/${output}/**/*`, {\n absolute: true,\n ignore: ['**/*.ts', '**/*.xts', '**/package.json', '**/package-lock.json', '**/*.wasm'],\n onlyFiles: true\n })\n\n for (const from of files) {\n const to = from.replace('/src', '').replace(`/${output}`, `/${wasmPackageName}`)\n fs.mkdirSync(path.dirname(to), {\n recursive: true\n })\n fs.copyFileSync(from, to)\n }\n\n /** 3. 特殊处理 app/manifest.json */\n fs.copyFileSync(\n path.resolve(fg.convertPathToPattern(projectPath), output, 'app', 'manifest.json'),\n path.resolve(fg.convertPathToPattern(projectPath), wasmPackageName, 'manifest.json')\n )\n}\n"],"sourceRoot":"../../../src"}
|