♻️ refactor(substore): 优化 alphaair 重命名规则与排序逻辑

This commit is contained in:
Orion
2026-06-03 09:55:44 +08:00
parent 3f3e4731c4
commit 93bb6a7a6c
2 changed files with 24 additions and 7 deletions
+17 -3
View File
@@ -1,7 +1,8 @@
/**
* Alpha Air 专用节点清理脚本
* - 压掉供应商、提供者、三网、家宽等 Alpha Air 专属文案
* - 保留地区、城市码和倍率,按地区内倍率排序并连续编号
* - 压掉提供者、三网、家宽等 Alpha Air 专属文案
* - 普通节点只保留地区,非倍率高级节点保留供应商,倍率节点保留倍率
* - 按地区内“普通 -> 倍率 -> 高级”排序并连续编号
* - 不追加订阅后缀,整合订阅最后仍交给 rename.js 处理
*/
function operator(proxies) {
@@ -93,6 +94,13 @@ function operator(proxies) {
return match ? `${match[1]}X` : '';
};
const providerOf = name => {
if (/SkyStroll/i.test(name)) return 'SkyStroll';
if (/isif/i.test(name)) return 'ISIF';
if (/(?:搬瓦工|Bandwagon|BWH|BWG)/i.test(name)) return 'BWH';
return '';
};
const leadingRegionPrefixOf = name => {
const match = name.match(/^([A-Z]{2})(?:\s+([A-Z]{3}))?(?=\s|$|-|\d|\|)/);
if (!match) return '';
@@ -132,6 +140,7 @@ function operator(proxies) {
const regionCode = regionPrefix.split(/\s+/)[0];
const cityCode = regionPrefix.split(/\s+/)[1] || '';
const multiplier = multiplierOf(text);
const provider = multiplier ? '' : providerOf(text);
const normalizedFlag = regionCodeToFlag(regionCode);
return {
@@ -139,8 +148,10 @@ function operator(proxies) {
originalIndex,
countryCode: regionCode,
cityCode,
provider,
providerRank: provider ? 1 : 0,
multiplierValue: multiplier ? Number(multiplier.replace(/X$/i, '')) : Number.NEGATIVE_INFINITY,
normalizedName: [normalizedFlag, regionPrefix, multiplier].filter(Boolean).join(' ').trim()
normalizedName: [normalizedFlag, regionPrefix, provider, multiplier].filter(Boolean).join(' ').trim()
};
};
@@ -160,6 +171,9 @@ function operator(proxies) {
const firstOrder = countryOrder[firstItem.countryCode];
const secondOrder = countryOrder[secondItem.countryCode];
if (firstOrder !== secondOrder) return firstOrder - secondOrder;
if (firstItem.providerRank !== secondItem.providerRank) {
return firstItem.providerRank - secondItem.providerRank;
}
if (firstItem.multiplierValue !== secondItem.multiplierValue) {
return firstItem.multiplierValue - secondItem.multiplierValue;
}