surgio
Version:
Generating rules for Surge, Clash, Quantumult like a PRO
91 lines • 3.65 kB
JavaScript
;
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