@ccos/ccweb-cli
Version:
Coocaa WebOS APP Command-Line Tools.
140 lines (130 loc) • 4.92 kB
JavaScript
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;