Refactor: adjust more output

This commit is contained in:
SukkaW
2024-09-21 19:04:11 +08:00
parent 7c372b3b8c
commit eeeadbc86b
10 changed files with 131 additions and 133 deletions

View File

@@ -1,6 +1,5 @@
import { getAppleCdnDomainsPromise } from './build-apple-cdn';
import { getDomesticAndDirectDomainsRulesetPromise } from './build-domestic-direct-lan-ruleset-dns-mapping-module';
import { surgeRulesetToClashClassicalTextRuleset, surgeDomainsetToClashRuleset } from './lib/clash';
import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
import { task } from './trace';
import path from 'node:path';
@@ -8,11 +7,11 @@ import path from 'node:path';
import { ALL as AllStreamServices } from '../Source/stream';
import { getChnCidrPromise } from './build-chn-cidr';
import { getTelegramCIDRPromise } from './build-telegram-cidr';
import { compareAndWriteFile } from './lib/create-file';
import { compareAndWriteFile, RulesetOutput } from './lib/create-file';
import { getMicrosoftCdnRulesetPromise } from './build-microsoft-cdn';
import { isTruthy } from './lib/misc';
import { appendArrayInPlace } from './lib/append-array-in-place';
import { OUTPUT_INTERNAL_DIR, SOURCE_DIR } from './constants/dir';
import { OUTPUT_INTERNAL_DIR, OUTPUT_SURGE_DIR, SOURCE_DIR } from './constants/dir';
const POLICY_GROUPS: Array<[name: string, insertProxy: boolean, insertDirect: boolean]> = [
['Default Proxy', true, false],
@@ -24,99 +23,123 @@ const POLICY_GROUPS: Array<[name: string, insertProxy: boolean, insertDirect: bo
['Final Match', true, true]
];
const removeNoResolved = (line: string) => line.replace(',no-resolve', '');
/**
* This only generates a simplified version, for under-used users only.
*/
export const buildSSPanelUIMAppProfile = task(require.main === module, __filename)(async (span) => {
const [
[domesticDomains, directDomains, lanDomains],
[domesticRules, directRules, lanRules],
appleCdnDomains,
microsoftCdnDomains,
appleCnDomains,
neteaseMusicDomains,
microsoftDomains,
appleDomains,
streamDomains,
steamDomains,
globalDomains,
telegramDomains,
domesticCidrs,
streamCidrs,
{ results: rawTelegramCidrs },
lanCidrs
microsoftCdnRules,
appleCnRules,
neteaseMusicRules,
microsoftRules,
appleRules,
streamRules,
steamDomainset,
globalRules,
telegramRules,
[domesticCidrs4, domesticCidrs6],
[streamCidrs4, streamCidrs6],
{ ipcidr: telegramCidrs4, ipcidr6: telegramCidrs6 },
rawLanCidrs
] = await Promise.all([
// domestic - domains
getDomesticAndDirectDomainsRulesetPromise()
.then(
data => (
data.map(surgeRulesetToClashClassicalTextRuleset)
) as [string[], string[], string[]]
),
getAppleCdnDomainsPromise().then(domains => domains.map(domain => `DOMAIN-SUFFIX,${domain}`)),
getMicrosoftCdnRulesetPromise().then(surgeRulesetToClashClassicalTextRuleset),
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/apple_cn.conf')),
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/neteasemusic.conf')).then(surgeRulesetToClashClassicalTextRuleset),
getDomesticAndDirectDomainsRulesetPromise(),
getAppleCdnDomainsPromise(),
getMicrosoftCdnRulesetPromise(),
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/apple_cn.conf')),
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/neteasemusic.conf')),
// microsoft & apple - domains
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/microsoft.conf')),
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/apple_services.conf')).then(surgeRulesetToClashClassicalTextRuleset),
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/microsoft.conf')),
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/apple_services.conf')),
// stream - domains
surgeRulesetToClashClassicalTextRuleset(AllStreamServices.flatMap((i) => i.rules)),
AllStreamServices.flatMap((i) => i.rules),
// steam - domains
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/steam.conf')).then(surgeDomainsetToClashRuleset),
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/steam.conf')),
// global - domains
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/global.conf')).then(surgeRulesetToClashClassicalTextRuleset),
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/telegram.conf')).then(surgeRulesetToClashClassicalTextRuleset),
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/global.conf')),
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/telegram.conf')),
// domestic - ip cidr
getChnCidrPromise().then(([cidrs4, cidrs6]) => [
...cidrs4.map(cidr => `IP-CIDR,${cidr}`),
...cidrs6.map(cidr => `IP-CIDR,${cidr}`)
]),
AllStreamServices.flatMap((i) => (
i.ip
? [
...i.ip.v4.map((ip) => `IP-CIDR,${ip}`),
...i.ip.v6.map((ip) => `IP-CIDR6,${ip}`)
]
: []
)),
getChnCidrPromise(),
AllStreamServices.reduce<[cidr4: string[], cidr6: string[]]>((acc, i) => {
if (i.ip) {
appendArrayInPlace(acc[0], i.ip.v4);
appendArrayInPlace(acc[1], i.ip.v6);
}
return acc;
}, [[], []]),
// global - ip cidr
getTelegramCIDRPromise(),
// lan - ip cidr
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'ip/lan.conf'))
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'ip/lan.conf'))
] as const);
const telegramCidrs = rawTelegramCidrs.map(removeNoResolved);
const domestic = new RulesetOutput(span, '_', 'non_ip')
.addFromRuleset(domesticRules)
.bulkAddDomainSuffix(appleCdnDomains)
.addFromRuleset(microsoftCdnRules)
.addFromRuleset(appleCnRules)
.addFromRuleset(neteaseMusicRules);
const microsoftApple = new RulesetOutput(span, '_', 'non_ip')
.addFromRuleset(microsoftRules)
.addFromRuleset(appleRules);
const stream = new RulesetOutput(span, '_', 'non_ip')
.addFromRuleset(streamRules);
const steam = new RulesetOutput(span, '_', 'non_ip')
.addFromDomainset(steamDomainset);
const global = new RulesetOutput(span, '_', 'non_ip')
.addFromRuleset(globalRules)
.addFromRuleset(telegramRules);
const direct = new RulesetOutput(span, '_', 'non_ip')
.addFromRuleset(directRules)
.addFromRuleset(lanRules);
const domesticCidr = new RulesetOutput(span, '_', 'ip')
.bulkAddCIDR4(domesticCidrs4)
.bulkAddCIDR6(domesticCidrs6);
const streamCidr = new RulesetOutput(span, '_', 'ip')
.bulkAddCIDR4(streamCidrs4)
.bulkAddCIDR6(streamCidrs6);
const telegramCidr = new RulesetOutput(span, '_', 'ip')
.bulkAddCIDR4(telegramCidrs4)
.bulkAddCIDR6(telegramCidrs6);
const lanCidrs = new RulesetOutput(span, '_', 'ip')
.addFromRuleset(rawLanCidrs);
await Promise.all([
domestic.done(),
microsoftApple.done(),
stream.done(),
steam.done(),
global.done(),
direct.done(),
domesticCidr.done(),
streamCidr.done(),
telegramCidr.done(),
lanCidrs.done()
]);
const output = generateAppProfile(
[
...domesticDomains,
...appleCdnDomains,
...microsoftCdnDomains,
...appleCnDomains,
...neteaseMusicDomains
],
[
...microsoftDomains,
...appleDomains
],
streamDomains,
steamDomains,
[
...globalDomains,
...telegramDomains
],
[
...directDomains,
...lanDomains
],
domesticCidrs,
streamCidrs,
[
...telegramCidrs
],
lanCidrs
domestic.clash(),
microsoftApple.clash(),
stream.clash(),
steam.clash(),
global.clash(),
direct.clash(),
domesticCidr.clash(),
streamCidr.clash(),
telegramCidr.clash(),
lanCidrs.clash()
);
await compareAndWriteFile(