UNPKG

surgio

Version:

Generating rules for Surge, Clash, Quantumult like a PRO

91 lines 3.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // istanbul ignore file const path_1 = __importDefault(require("path")); const core_1 = require("@oclif/core"); const ali_oss_1 = __importDefault(require("ali-oss")); const fs_extra_1 = __importDefault(require("fs-extra")); const node_dir_1 = __importDefault(require("node-dir")); const base_command_1 = __importDefault(require("../base-command")); const config_1 = require("../config"); class UploadCommand extends base_command_1.default { static description = '上传规则到阿里云 OSS'; async run() { const config = this.surgioConfig; if (this.flags.output) { (0, config_1.setConfig)('output', this.flags.output); } const region = config?.upload?.region; const bucket = config?.upload?.bucket; const endpoint = config?.upload?.endpoint; const accessKeyId = process.env.OSS_ACCESS_KEY_ID ?? config?.upload?.accessKeyId; const accessKeySecret = process.env.OSS_ACCESS_KEY_SECRET ?? config?.upload?.accessKeySecret; if (!accessKeyId || !accessKeySecret) { throw new Error('请在配置文件中配置 OSS 的 accessKeyId 和 accessKeySecret'); } const client = new ali_oss_1.default({ secure: true, region, bucket, endpoint, accessKeyId, accessKeySecret, }); const prefix = config?.upload?.prefix || '/'; const fileList = await node_dir_1.default.promiseFiles(config.output); const files = fileList.map((filePath) => ({ fileName: path_1.default.basename(filePath), filePath, })); const fileNameList = files.map((file) => file.fileName); const upload = () => { return Promise.all(files.map((file) => { const { fileName, filePath } = file; const objectName = `${prefix}${fileName}`; const readStream = fs_extra_1.default.createReadStream(filePath); return client.put(objectName, readStream, { mime: 'text/plain; charset=utf-8', headers: { 'Cache-Control': 'private, no-cache, no-store', }, }); })); }; const deleteUnwanted = async () => { const list = await client.list({ prefix, delimiter: '/', 'max-keys': 100, }, {}); const deleteList = []; for (const key in list.objects) { if (Object.hasOwn(list.objects, key)) { const object = list.objects[key]; const objectName = object.name.replace(prefix, ''); const isExist = fileNameList.indexOf(objectName) > -1; if (objectName && !isExist) { deleteList.push(object.name); } } } if (deleteList.length) { await client.deleteMulti(deleteList); } }; this.ora.start('开始上传到阿里云 OSS'); await upload(); await deleteUnwanted(); await this.cleanup(); } } UploadCommand.flags = { output: core_1.Flags.string({ char: 'o', description: '生成规则的目录', }), }; exports.default = UploadCommand; //# sourceMappingURL=upload.js.map