UNPKG

@ccos/ccweb-cli

Version:

Coocaa WebOS APP Command-Line Tools.

140 lines (130 loc) 4.92 kB
const path = require('path'); const fs = require('fs'); const alldatas_svelte = require('./example_svelte'); const alldatas_vue = require('./example_vue3'); const alldatas_react = require('./example_react'); function endWithNullChar(str1) { let index = str1.indexOf('\0'); if (index > 0) { return str1.substr(0, index); } else if (index == 0) { return ''; } return str1; } function extractExampleFiles(srcType) { let yushu = 0; // 已经处理的文件大小的余数 let firstWrite = false; let curFileName = ''; let longLinkFlag = false; let longLinkName = ''; let longLinkNameCombin = ''; let curDir = process.cwd(); console.log('当前目录为:' + curDir); let alldatas; if (isJs == 1) { alldatas = alldatas_svelte; } else if (isJs == 2) { alldatas = alldatas_vue; } else if (isJs == 2) { alldatas = alldatas_react; } else { alldatas = alldatas_svelte; } for (let base64Str of alldatas) { let buffer = Buffer.from(base64Str, 'base64'); if (yushu == 0) { let nameB = buffer.slice(0, 100); let name = nameB.toString('utf8'); name = endWithNullChar(name); if (name == '') continue; let flagB = buffer.slice(0x9C, 0x9D); let flag = flagB.toString('utf8'); if (flag == 'L' || name == '././@LongLink') { console.log('正在处理:' + name); let longLinkSizeB = buffer.slice(100 + 8 + 8 + 8, 100 + 8 + 8 + 8 + 12); let longLinkSizeS = longLinkSizeB.toString('utf8'); longLinkSizeS = endWithNullChar(longLinkSizeS); let fileSize = parseInt(longLinkSizeS, 8); yushu = fileSize; longLinkFlag = true; longLinkName = ''; longLinkNameCombin = ''; continue; } else { longLinkFlag = false; } if (flag == '5') { //console.log('目录'); yushu = 0; firstWrite = true; curFileName = name; // 创建目录 let realName = null; if (longLinkName != '') realName = longLinkName; else realName = curFileName; console.log('正在生成:' + realName); const dirName = path.join(process.cwd(), realName); fs.mkdirSync(dirName); longLinkName = ''; longLinkNameCombin = ''; } else { let fileSizeB = buffer.slice(100 + 8 + 8 + 8, 100 + 8 + 8 + 8 + 12); let fileSizeS = fileSizeB.toString('utf8'); fileSizeS = endWithNullChar(fileSizeS); let fileSize = parseInt(fileSizeS, 8); yushu = fileSize; firstWrite = true; curFileName = name; console.log('正在生成:' + ((longLinkName != '') ? longLinkName : curFileName)); } } else { let writeSize = (yushu >= 512) ? 512 : yushu; let writeBuf = null; if (writeSize == 512) { writeBuf = buffer; } else { writeBuf = buffer.slice(0, writeSize); } // if (!longLinkFlag) { // 正常文件 let filePath = null; if (longLinkName != '') filePath = path.join(process.cwd(), longLinkName); else filePath = path.join(process.cwd(), curFileName); if (firstWrite) { fs.writeFileSync(filePath, writeBuf); } else { fs.appendFileSync(filePath, writeBuf); } firstWrite = false; // yushu -= 512; if (yushu < 0) yushu = 0; // if (yushu == 0) { longLinkName = ''; } } else { // 这里是文件块内容作为 LongLink 的情况 let str = writeBuf.toString('utf8'); str = endWithNullChar(str); longLinkNameCombin += str; // yushu -= 512; if (yushu < 0) yushu = 0; // if (yushu == 0) { longLinkName = longLinkNameCombin; } } } } } module.exports = extractExampleFiles;