@bingosoft/cli
Version:
bingo framework cli
120 lines (111 loc) • 3.76 kB
JavaScript
const fs = require("fs");
const request = require('request');
const path = require("path");
const ora = require('ora');
const program = require("commander");
const logSymbols = require("log-symbols");
const chalk = require("chalk");
const admZip = require('adm-zip');
const isURL = (s) => {
return /^http[s]?:\/\/.*/.test(s)
}
const config = {
tempFileName: "temp.json", //临时存储文件名
serveUrl: "https://dfuse-dev.bingosoft.net/scm-convert/convert/api", //远程服务器地址
downloadFileName: "swagger.zip" //下载回来的文件名
}
const downloadFile = async url => {
return new Promise((resolve, reject) => {
const spinner = ora(`下载swagger文件`)
spinner.start();
const writeStream = fs.createWriteStream(config.tempFileName);
const readStream = request({
url: url,
strictSSL: false
})
readStream.pipe(writeStream);
readStream.on('end', function () {
spinner.succeed();
});
readStream.on('error', function (err) {
spinner.fail();
reject(err);
if (fs.existsSync(config.tempFileName)) {
fs.unlinkSync(config.tempFileName);
}
})
writeStream.on("finish", function () {
writeStream.end();
resolve(config.tempFileName);
});
})
}
const readFile = (filename) => {
return new Promise((resolve, reject) => {
//判断文件是否存在
const tempFile = path.resolve(filename);
if (!fs.existsSync(tempFile)) {
reject(new Error(`no such file or directory:${tempFile}`));
return;
}
const spinner = ora(`生成markdown文件...`)
spinner.start();
const writeStream = fs.createWriteStream(config.downloadFileName);
const readStream = request({
strictSSL: false,
method: 'post',
url: config.serveUrl,
formData: {
file: fs.createReadStream(tempFile)
}
})
readStream.pipe(writeStream);
readStream.on('end', function () {
spinner.succeed();
//删除临时文件
if (fs.existsSync(tempFile)) {
fs.unlinkSync(tempFile);
}
});
readStream.on('error', function (err) {
spinner.fail();
reject(err);
})
writeStream.on("finish", function () {
writeStream.end();
resolve();
});
})
}
const getFile = async function (docsMessage) { //获取资源
try {
//判断地址是否为远程地址
if (isURL(docsMessage.swagger)) {
const path = await downloadFile(docsMessage.swagger); //下载远程文件到本地
await readFile(path, docsMessage.destination);
unzip(docsMessage.destination)
} else {
//读取本地资源
await readFile(docsMessage.swagger, docsMessage.destination);
unzip(docsMessage.destination)
}
} catch (err) {
console.error(logSymbols.error, chalk.red(`${err}`));
program.help();
return;
}
}
function unzip(destination) {
//解压
//destination = path.join(path.resolve(destination), config.downloadFileName);
const zip = new admZip(path.resolve(config.downloadFileName));
zip.extractAllTo(path.resolve(destination), true);
fs.unlinkSync(path.resolve(config.downloadFileName));
}
module.exports = {
isURL,
downloadFile,
readFile,
config,
getFile
}