UNPKG

@bingosoft/cli

Version:

bingo framework cli

120 lines (111 loc) 3.76 kB
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 }