refactor(substore): 将通用工具函数迁移至公共库
- 从各个重命名脚本中移除重复的工具函数实现 - 将 multiplierOf、multiplierValueOf、stripSubscriptionSuffix 等函数统一到 common.js - 使用 utils.multiplierOf、utils.multiplierValueOf 替代本地实现 - 引入 utils.createSequenceCounter 替代手动计数逻辑 - 更新版本号从 20260608-1 到 20260702-1 - 移除重复的正则表达式匹配逻辑 - 标准化序列计数器实现方式 - 优化 yinyun-rename.js 中的信息节点过滤逻辑
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* - 去掉 SZ/HZ/[Edge] 入口标签,保留倍率,压掉供应商和入口线路特征
|
||||
*/
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
const COMMON_SCRIPT_VERSION = '20260608-1';
|
||||
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
|
||||
@@ -45,19 +45,9 @@ async function operator(proxies) {
|
||||
return '';
|
||||
};
|
||||
|
||||
const multiplierOf = name => {
|
||||
const match = name.match(/\b(\d+(?:\.\d+)?)(?:\s*[xX]|倍)\b/i);
|
||||
return match ? `${match[1]}X` : '';
|
||||
};
|
||||
|
||||
const multiplierValueOf = multiplier => (
|
||||
multiplier ? Number(multiplier.replace(/X$/i, '')) : Number.NEGATIVE_INFINITY
|
||||
);
|
||||
|
||||
const cleanCoreName = name => {
|
||||
const { text } = utils.splitLeadingOrInlineFlag(name);
|
||||
return text
|
||||
.replace(/\s+-\s*Iris Cloud(?:\s+\d{2})?\s*$/i, '')
|
||||
return utils.stripSubscriptionSuffix(text, 'Iris Cloud')
|
||||
.replace(/^\s*(?:SZ|HZ)\s+\d{1,2}\s+/i, '')
|
||||
.replace(/^\s*\[Edge]\s*/i, '')
|
||||
.trim();
|
||||
@@ -89,7 +79,7 @@ async function operator(proxies) {
|
||||
originalIndex,
|
||||
regionPrefix,
|
||||
regionCode,
|
||||
multiplier: multiplierOf(coreName),
|
||||
multiplier: utils.multiplierOf(coreName),
|
||||
flag: utils.regionCodeToFlag(regionCode)
|
||||
};
|
||||
});
|
||||
@@ -109,23 +99,22 @@ async function operator(proxies) {
|
||||
const firstRegionOrder = regionOrder[firstItem.regionPrefix];
|
||||
const secondRegionOrder = regionOrder[secondItem.regionPrefix];
|
||||
if (firstRegionOrder !== secondRegionOrder) return firstRegionOrder - secondRegionOrder;
|
||||
const firstMultiplierValue = multiplierValueOf(firstItem.multiplier);
|
||||
const secondMultiplierValue = multiplierValueOf(secondItem.multiplier);
|
||||
const firstMultiplierValue = utils.multiplierValueOf(firstItem.multiplier);
|
||||
const secondMultiplierValue = utils.multiplierValueOf(secondItem.multiplier);
|
||||
if (firstMultiplierValue !== secondMultiplierValue) {
|
||||
return firstMultiplierValue - secondMultiplierValue;
|
||||
}
|
||||
return firstItem.originalIndex - secondItem.originalIndex;
|
||||
});
|
||||
|
||||
const regionCount = Object.create(null);
|
||||
const nextSequence = utils.createSequenceCounter();
|
||||
return normalizedItems.map(item => {
|
||||
if (!item.regionPrefix) return item.proxy;
|
||||
|
||||
regionCount[item.regionPrefix] = (regionCount[item.regionPrefix] || 0) + 1;
|
||||
item.proxy.name = [
|
||||
item.flag,
|
||||
item.regionPrefix,
|
||||
String(regionCount[item.regionPrefix]).padStart(2, '0'),
|
||||
nextSequence(item.regionPrefix),
|
||||
item.multiplier
|
||||
].filter(Boolean).join(' ').trim();
|
||||
return item.proxy;
|
||||
|
||||
Reference in New Issue
Block a user