@zzclub/z-cli
Version:
all-in-one 工具箱,专为提升日常及工作效率而生
123 lines (114 loc) • 3.67 kB
JavaScript
import {
writeFileContent,
getLocalConfig,
setHighLightStr,
} from "../utils/common.js";
import {
requestPicGo,
checkFileSize,
checkFileSizeAndFilter,
uploadFileByPicGo,
batchUploadByPicGo,
} from "../utils/picgo.js";
import { getFormatedFileSize, replaceFileContent } from "../utils/file.js";
import chalk from "chalk";
import ora from "ora";
import path from "node:path";
import { dirname } from "node:path";
import { fileURLToPath } from "node:url";
import fs from "node:fs";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const supportFileTypes = ["png", "jpg", "jpeg", "gif", "webp"];
export const picgoCmd = {
name: "picgo",
description: "上传图片(此命令暂时废弃, 原因见readme)",
options: [
{
flags: "-f, --file <file>",
description: "要上传的图片文件",
defaultValue: null,
},
{
flags: "-d, --dir <dir>",
description: "上传文件夹内所有文件",
defaultValue: null,
},
{
flags: "-co, --condition <condition>",
description: "上传文件夹内所有名称包含[--condition]的图片文件",
defaultValue: null,
},
{
flags: "-m, --max <max>",
description: "大于指定大小的图片不会被上传",
defaultValue: 60,
},
],
action: async (option, test) => {
const spinner = ora();
const config = await getLocalConfig();
const { file, dir, condition, tinyFiles } = option;
if (!file && !dir && !condition && (!tinyFiles || !tinyFiles.length)) {
spinner.fail("请指定要上传的文件(--file=xxx)或文件夹(--dir=/a/b)");
process.exit(1);
}
// const _replaceMaps = replaceMaps.concat();
// 从压缩命令调用过来的
if (tinyFiles && tinyFiles.length) {
await batchUploadByPicGo(tinyFiles, option);
if (!option.replace) process.exit(1);
spinner.start("开始替换文件内容, 替换后请仔细检查!");
const fileContent = await replaceFileContent(
option.replaceFile,
option.replaceMaps
);
if (!fileContent) {
spinner.fail("替换文件内容失败! 请检查要替换的文件是否存在!");
process.exit(1);
}
fs.writeFile(option.replaceFile, fileContent, "utf-8", (error) => {
if (!error) {
spinner.succeed(
`[${chalk.red(
path.basename(option.replaceFile)
)}]图片链接替换完成!请前往检查!`
);
} else {
console.log(error);
// spinner.fail(`写入${chalk.red(filePath)}文件失败, 请重试`);
spinner.fail("图片链接替换失败!");
}
process.exit(1);
});
}
// 指定文件上传
if (file) {
await uploadFileByPicGo(file, option);
process.exit(1);
}
// 指定文件夹, 翻译文件夹内所有文件
if (dir || condition) {
let inputDirPath = dir || "./";
let files;
try {
// 读取所有文件
files = fs.readdirSync(inputDirPath);
files = files.map((filePath) =>
path.resolve(process.cwd(), inputDirPath, filePath)
);
files = files.filter((f) => {
let fileName = path.basename(f);
let index = fileName.indexOf(condition);
return index !== -1;
});
await batchUploadByPicGo(files, option);
// spinner.succeed(`共有${files.length}个文件${files}`);
} catch (err) {
spinner.fail("出错啦, 文件夹似乎不存在");
process.exit(1);
}
process.exit(1);
}
},
};