This commit is contained in:
2026-05-06 00:10:45 +08:00
parent 2e3eb4b8f8
commit 916a4f5ffc
19 changed files with 2431 additions and 723 deletions
+35 -2
View File
@@ -14,6 +14,7 @@ type ClashSettings = {
template: string;
extraProxyGroups: string;
profileName: string;
mainProxyGroupMemberSlugs: string[];
proxyGroups: ProxyGroupConfig[];
};
@@ -63,6 +64,34 @@ function renderGroupEntry(name: string, proxyNames: string[]) {
].join("\n");
}
function orderNodesBySlugs(nodes: Hy2NodeRow[], orderedSlugs: string[]) {
if (orderedSlugs.length === 0) {
return nodes;
}
const nodesBySlug = new Map(nodes.map((node) => [node.slug, node]));
const seen = new Set<string>();
const orderedNodes: Hy2NodeRow[] = [];
for (const slug of orderedSlugs) {
const node = nodesBySlug.get(slug);
if (!node || seen.has(slug)) {
continue;
}
orderedNodes.push(node);
seen.add(slug);
}
for (const node of nodes) {
if (!seen.has(node.slug)) {
orderedNodes.push(node);
}
}
return orderedNodes;
}
export function encodeRFC5987ValueChars(value: string) {
return encodeURIComponent(value)
.replace(/['()]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`)
@@ -141,11 +170,15 @@ export function buildSubscriptionConfig(input: {
const eligibleNodes = input.nodes.filter(
(node) => node.enabled && node.server_host && node.server_port > 0,
);
const orderedEligibleNodes = orderNodesBySlugs(
eligibleNodes,
input.settings.mainProxyGroupMemberSlugs,
);
const nodeNameBySlug = new Map(
eligibleNodes.map((node) => [node.slug, node.client_name || node.name]),
);
const proxyNames = eligibleNodes.map((node) => node.client_name || node.name);
const proxiesBlock = eligibleNodes.map((node) => renderProxy(node, authString)).join("\n");
const proxyNames = orderedEligibleNodes.map((node) => node.client_name || node.name);
const proxiesBlock = orderedEligibleNodes.map((node) => renderProxy(node, authString)).join("\n");
const defaultTemplate = input.settings.template.trimEnd() || readDefaultTemplate();
const renderedGroups = [
renderGroupEntry(input.settings.profileName || "FeieProxy", proxyNames),