Refactor: new write strategy (#58)

This commit is contained in:
Sukka
2025-01-29 03:58:49 +08:00
committed by GitHub
parent 6606d5cb01
commit b22079f5eb
17 changed files with 1096 additions and 673 deletions

View File

@@ -9,9 +9,10 @@ import { getChnCidrPromise } from './build-chn-cidr';
import { getTelegramCIDRPromise } from './build-telegram-cidr';
import { compareAndWriteFile, RulesetOutput } from './lib/create-file';
import { getMicrosoftCdnRulesetPromise } from './build-microsoft-cdn';
import { isTruthy } from 'foxts/guard';
import { isTruthy, nullthrow } from 'foxts/guard';
import { appendArrayInPlace } from './lib/append-array-in-place';
import { OUTPUT_INTERNAL_DIR, OUTPUT_SURGE_DIR, SOURCE_DIR } from './constants/dir';
import { ClashClassicRuleSet } from './lib/writing-strategy/clash';
const POLICY_GROUPS: Array<[name: string, insertProxy: boolean, insertDirect: boolean]> = [
['Default Proxy', true, false],
@@ -79,6 +80,7 @@ export const buildSSPanelUIMAppProfile = task(require.main === module, __filenam
] as const);
const domestic = new RulesetOutput(span, '_', 'non_ip')
.replaceStrategies([new ClashClassicRuleSet('non_ip')])
.addFromRuleset(domesticRules)
.bulkAddDomainSuffix(appleCdnDomains)
.bulkAddDomain(microsoftCdnDomains)
@@ -87,62 +89,65 @@ export const buildSSPanelUIMAppProfile = task(require.main === module, __filenam
.addFromRuleset(neteaseMusicRules);
const microsoftApple = new RulesetOutput(span, '_', 'non_ip')
.replaceStrategies([new ClashClassicRuleSet('non_ip')])
.addFromRuleset(microsoftRules)
.addFromRuleset(appleRules);
const stream = new RulesetOutput(span, '_', 'non_ip')
.replaceStrategies([new ClashClassicRuleSet('non_ip')])
.addFromRuleset(streamRules);
const steam = new RulesetOutput(span, '_', 'non_ip')
.replaceStrategies([new ClashClassicRuleSet('non_ip')])
.addFromDomainset(steamDomainset);
const global = new RulesetOutput(span, '_', 'non_ip')
.replaceStrategies([new ClashClassicRuleSet('non_ip')])
.addFromRuleset(globalRules)
.addFromRuleset(telegramRules);
const direct = new RulesetOutput(span, '_', 'non_ip')
.replaceStrategies([new ClashClassicRuleSet('non_ip')])
.addFromRuleset(directRules)
.addFromRuleset(lanRules);
const domesticCidr = new RulesetOutput(span, '_', 'ip')
.replaceStrategies([new ClashClassicRuleSet('ip')])
.bulkAddCIDR4(domesticCidrs4)
.bulkAddCIDR6(domesticCidrs6);
const streamCidr = new RulesetOutput(span, '_', 'ip')
.replaceStrategies([new ClashClassicRuleSet('ip')])
.bulkAddCIDR4(streamCidrs4)
.bulkAddCIDR6(streamCidrs6);
const telegramCidr = new RulesetOutput(span, '_', 'ip')
.replaceStrategies([new ClashClassicRuleSet('ip')])
.bulkAddCIDR4(telegramCidrs4)
.bulkAddCIDR6(telegramCidrs6);
const lanCidrs = new RulesetOutput(span, '_', 'ip')
.replaceStrategies([new ClashClassicRuleSet('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(
domestic.clash(),
microsoftApple.clash(),
stream.clash(),
steam.clash(),
global.clash(),
direct.clash(),
domesticCidr.clash(),
streamCidr.clash(),
telegramCidr.clash(),
lanCidrs.clash()
...(
(await Promise.all([
domestic.output(),
microsoftApple.output(),
stream.output(),
steam.output(),
global.output(),
direct.output(),
domesticCidr.output(),
streamCidr.output(),
telegramCidr.output(),
lanCidrs.output()
])).map(output => nullthrow(output[0]))
) as [
string[], string[], string[], string[], string[],
string[], string[], string[], string[], string[]
]
);
await compareAndWriteFile(