854aceeae5
* 禁用安装步骤中的自动清理,统一在升级流程结束后执行 * 清理 Homebrew prefix 失效链接及日期早于今天的缓存 * 保留当天生成的下载缓存,并支持失败后继续清理 * 扩展全量清理参数支持并更新相关文档说明
122 lines
4.0 KiB
JavaScript
122 lines
4.0 KiB
JavaScript
/**
|
||
* YinYun 专用节点清理脚本
|
||
* - 将中文地区名压成国家短码并补齐国旗
|
||
* - 忽略 YinYun 原始的 优选、数字编号和 (T)/(R) 线路标记
|
||
* - 按地区出现顺序连续编号,方便全局 rename.js 再追加订阅后缀
|
||
*/
|
||
// noinspection JSUnusedGlobalSymbols
|
||
const COMMON_SCRIPT_VERSION = '20260702-1';
|
||
const COMMON_SCRIPT_URL = `https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=${COMMON_SCRIPT_VERSION}`;
|
||
const hasCurrentRenameUtils = utils => Boolean(
|
||
utils && utils.version === COMMON_SCRIPT_VERSION
|
||
);
|
||
|
||
async function loadRenameUtils() {
|
||
if (typeof globalThis !== 'undefined' && hasCurrentRenameUtils(globalThis.SubStoreRenameUtils)) {
|
||
return globalThis.SubStoreRenameUtils;
|
||
}
|
||
|
||
const cache = typeof scriptResourceCache !== 'undefined' ? scriptResourceCache : null;
|
||
let script = cache && cache.get(COMMON_SCRIPT_URL);
|
||
if (!script) {
|
||
const response = await $substore.http.get({ url: COMMON_SCRIPT_URL });
|
||
script = response && (response.body || response.data || response);
|
||
if (cache) cache.set(COMMON_SCRIPT_URL, script);
|
||
}
|
||
|
||
new Function(String(script))();
|
||
if (!hasCurrentRenameUtils(globalThis.SubStoreRenameUtils)) {
|
||
throw new Error('Loaded common.js is missing current rename utilities');
|
||
}
|
||
return globalThis.SubStoreRenameUtils;
|
||
}
|
||
|
||
async function operator(proxies) {
|
||
const utils = await loadRenameUtils();
|
||
const regionAliases = [
|
||
['哈萨克斯坦', 'KZ'],
|
||
['印度尼西亚', 'ID'],
|
||
['孟加拉国', 'BD'],
|
||
['澳大利亚', 'AU'],
|
||
['保加利亚', 'BG'],
|
||
['格鲁吉亚', 'GE'],
|
||
['立陶宛', 'LT'],
|
||
['俄罗斯', 'RU'],
|
||
['新加坡', 'SG'],
|
||
['马来西亚', 'MY'],
|
||
['罗马尼亚', 'RO'],
|
||
['亚美尼亚', 'AM'],
|
||
['葡萄牙', 'PT'],
|
||
['拉脱维亚', 'LV'],
|
||
['加拿大', 'CA'],
|
||
['澳洲', 'AU'],
|
||
['捷克', 'CZ'],
|
||
['南非', 'ZA'],
|
||
['芬兰', 'FI'],
|
||
['瑞士', 'CH'],
|
||
['墨西哥', 'MX'],
|
||
['瑞典', 'SE'],
|
||
['比利时', 'BE'],
|
||
['阿联酋', 'AE'],
|
||
['法国', 'FR'],
|
||
['波兰', 'PL'],
|
||
['荷兰', 'NL'],
|
||
['奥地利', 'AT'],
|
||
['巴西', 'BR'],
|
||
['土耳其', 'TR'],
|
||
['以色列', 'IL'],
|
||
['意大利', 'IT'],
|
||
['西班牙', 'ES'],
|
||
['乌克兰', 'UA'],
|
||
['德国', 'DE'],
|
||
['英国', 'UK'],
|
||
['印度', 'IN'],
|
||
['泰国', 'TH'],
|
||
['香港', 'HK'],
|
||
['美国', 'US'],
|
||
['日本', 'JP'],
|
||
['韩国', 'KR'],
|
||
['台湾', 'TW']
|
||
];
|
||
const regionResolver = utils.createRegionResolver(regionAliases);
|
||
|
||
const stripBackupLabel = name => String(name)
|
||
.replace(/\s*(?:ᴮᴬᴷ|BAK|BACKUP)\s*$/iu, '')
|
||
.trim();
|
||
|
||
const stripLineType = name => String(name)
|
||
.replace(/\s*[((]\s*[TR]\s*[))]\s*$/i, '')
|
||
.trim();
|
||
|
||
const regionPrefixOf = name => {
|
||
if (/魔法节点/i.test(name)) return 'MAGIC';
|
||
return regionResolver.aliasRegionPrefixOf(name) || utils.leadingRegionPrefixOf(name);
|
||
};
|
||
|
||
const nextSequence = utils.createSequenceCounter();
|
||
|
||
return proxies.map(proxy => {
|
||
if (typeof proxy.name !== 'string') {
|
||
return proxy;
|
||
}
|
||
|
||
const cleanName = utils.stripSubscriptionSuffix(proxy.name, 'YinYun');
|
||
const { text } = utils.splitLeadingOrInlineFlag(cleanName);
|
||
const coreName = stripLineType(stripBackupLabel(text));
|
||
const regionPrefix = regionPrefixOf(coreName);
|
||
if (!regionPrefix) {
|
||
proxy.name = coreName;
|
||
return proxy;
|
||
}
|
||
|
||
const regionCode = regionPrefix.split(/\s+/)[0];
|
||
const flag = regionPrefix === 'MAGIC' ? '' : utils.regionCodeToFlag(regionCode);
|
||
proxy.name = [
|
||
flag,
|
||
regionPrefix,
|
||
nextSequence(regionPrefix)
|
||
].filter(Boolean).join(' ').trim();
|
||
|
||
return proxy;
|
||
});
|
||
} |