From d7a2476f900d2ebd092beb6b535338b27e56bfb2 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sun, 16 Jun 2024 00:56:38 +0800 Subject: [PATCH] Refactor: make LAN into build script --- ...-direct-lan-ruleset-dns-mapping-module.ts} | 24 ++++++++++++++-- Build/build-sgmodule-always-realip.ts | 4 +-- Build/build-sspanel-appprofile.ts | 9 +----- Build/index.ts | 2 +- Source/non_ip/direct.ts | 7 +++-- Source/non_ip/lan.conf | 28 ------------------- 6 files changed, 30 insertions(+), 44 deletions(-) rename Build/{build-domestic-ruleset.ts => build-domestic-direct-lan-ruleset-dns-mapping-module.ts} (80%) delete mode 100644 Source/non_ip/lan.conf diff --git a/Build/build-domestic-ruleset.ts b/Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts similarity index 80% rename from Build/build-domestic-ruleset.ts rename to Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts index 6bf33075..408f8667 100644 --- a/Build/build-domestic-ruleset.ts +++ b/Build/build-domestic-direct-lan-ruleset-dns-mapping-module.ts @@ -1,7 +1,7 @@ // @ts-check import path from 'path'; import { DOMESTICS } from '../Source/non_ip/domestic'; -import { DIRECTS } from '../Source/non_ip/direct'; +import { DIRECTS, LANS } from '../Source/non_ip/direct'; import { readFileIntoProcessedArray } from './lib/fetch-text-by-line'; import { compareAndWriteFile, createRuleset } from './lib/create-file'; import { task } from './trace'; @@ -11,6 +11,7 @@ import { createMemoizedPromise } from './lib/memo-promise'; export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(async () => { const domestics = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/domestic.conf')); const directs = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/direct.conf')); + const lans: string[] = []; Object.entries(DOMESTICS).forEach(([, { domains }]) => { domestics.push(...domains.map((domain) => `DOMAIN-SUFFIX,${domain}`)); @@ -18,8 +19,11 @@ export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(a Object.entries(DIRECTS).forEach(([, { domains }]) => { directs.push(...domains.map((domain) => `DOMAIN-SUFFIX,${domain}`)); }); + Object.entries(LANS).forEach(([, { domains }]) => { + lans.push(...domains.map((domain) => `DOMAIN-SUFFIX,${domain}`)); + }); - return [domestics, directs] as const; + return [domestics, directs, lans] as const; }); export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(async (span) => { @@ -54,6 +58,20 @@ export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(asy path.resolve(import.meta.dir, '../List/non_ip/direct.conf'), path.resolve(import.meta.dir, '../Clash/non_ip/direct.txt') ), + createRuleset( + span, + 'Sukka\'s Ruleset - LAN', + [ + ...SHARED_DESCRIPTION, + '', + 'This file includes rules for LAN DOMAIN and reserved TLDs.' + ], + new Date(), + res[2], + 'ruleset', + path.resolve(import.meta.dir, '../List/non_ip/lan.conf'), + path.resolve(import.meta.dir, '../Clash/non_ip/lan.txt') + ), compareAndWriteFile( span, [ @@ -61,7 +79,7 @@ export const buildDomesticRuleset = task(import.meta.main, import.meta.path)(asy `#!desc=Last Updated: ${new Date().toISOString()}`, '', '[Host]', - ...([...Object.entries(DOMESTICS), ...Object.entries(DIRECTS)]) + ...([...Object.entries(DOMESTICS), ...Object.entries(DIRECTS), ...Object.entries(LANS)]) .flatMap(([, { domains, dns, ...rest }]) => [ ...( 'hosts' in rest diff --git a/Build/build-sgmodule-always-realip.ts b/Build/build-sgmodule-always-realip.ts index 52bbbae6..b5f2f26e 100644 --- a/Build/build-sgmodule-always-realip.ts +++ b/Build/build-sgmodule-always-realip.ts @@ -1,11 +1,11 @@ import path from 'path'; import { task } from './trace'; import { compareAndWriteFile } from './lib/create-file'; -import { DIRECTS } from '../Source/non_ip/direct'; +import { DIRECTS, LANS } from '../Source/non_ip/direct'; const HOSTNAMES = [ // Intranet, Router Setup, and mant more - ...(Object.entries(DIRECTS)).flatMap(([, { domains }]) => domains.flatMap((domain) => [`*.${domain}`, domain])), + ...([Object.entries(DIRECTS), Object.entries(LANS)]).flatMap(data => data.flatMap(([, { domains }]) => domains.flatMap((domain) => [`*.${domain}`, domain]))), // Network Detection, Captive Portal 'msftncsi.com', 'msftconnecttest.com', diff --git a/Build/build-sspanel-appprofile.ts b/Build/build-sspanel-appprofile.ts index 56e9289e..085f9eef 100644 --- a/Build/build-sspanel-appprofile.ts +++ b/Build/build-sspanel-appprofile.ts @@ -1,5 +1,5 @@ import { getAppleCdnDomainsPromise } from './build-apple-cdn'; -import { getDomesticAndDirectDomainsRulesetPromise } from './build-domestic-ruleset'; +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'; @@ -39,7 +39,6 @@ export const buildSSPanelUIMAppProfile = task(import.meta.main, import.meta.path steamDomains, globalDomains, telegramDomains, - lanDomains, domesticCidrs, streamCidrs, { results: rawTelegramCidrs }, @@ -62,8 +61,6 @@ export const buildSSPanelUIMAppProfile = task(import.meta.main, import.meta.path // global - domains readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/global.conf')).then(surgeRulesetToClashClassicalTextRuleset), readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/telegram.conf')).then(surgeRulesetToClashClassicalTextRuleset), - // lan - domains - readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/lan.conf')), // domestic - ip cidr getChnCidrPromise().then(cidrs => cidrs.map(cidr => `IP-CIDR,${cidr}`)), AllStreamServices.flatMap((i) => ( @@ -100,7 +97,6 @@ export const buildSSPanelUIMAppProfile = task(import.meta.main, import.meta.path ...globalDomains, ...telegramDomains ], - lanDomains, domesticCidrs, streamCidrs, [ @@ -125,7 +121,6 @@ function generateAppProfile( steamDomains: string[], globalDomains: string[], - lanDomains: string[], directCidrs: string[], streamCidrs: string[], globalCidrs: string[], @@ -194,8 +189,6 @@ function generateAppProfile( // global - domains ...globalDomains.map(line => ` '${line},Global',`), // microsoft & apple - ip cidr (nope) - // lan - domains - ...lanDomains.map(line => ` '${line},DIRECT',`), // stream - ip cidr ...streamCidrs.map(line => ` '${line},Stream',`), // global - ip cidr diff --git a/Build/index.ts b/Build/index.ts index 570e6c0c..9abb4c1c 100644 --- a/Build/index.ts +++ b/Build/index.ts @@ -10,7 +10,7 @@ import { buildTelegramCIDR } from './build-telegram-cidr'; import { buildChnCidr } from './build-chn-cidr'; import { buildSpeedtestDomainSet } from './build-speedtest-domainset'; import { buildInternalReverseChnCIDR } from './build-internal-reverse-chn-cidr'; -import { buildDomesticRuleset } from './build-domestic-ruleset'; +import { buildDomesticRuleset } from './build-domestic-direct-lan-ruleset-dns-mapping-module'; import { buildStreamService } from './build-stream-service'; import { buildRedirectModule } from './build-sgmodule-redirect'; diff --git a/Source/non_ip/direct.ts b/Source/non_ip/direct.ts index 4c31fb78..b27a0701 100644 --- a/Source/non_ip/direct.ts +++ b/Source/non_ip/direct.ts @@ -78,7 +78,10 @@ export const DIRECTS = { 'injections.adguard.org', 'local.adguard.org' ] - }, + } +} as const; + +export const LANS = { LAN: { dns: 'system', domains: [ @@ -108,4 +111,4 @@ export const DIRECTS = { '254.169.in-addr.arpa' ] } -} as const; +}; diff --git a/Source/non_ip/lan.conf b/Source/non_ip/lan.conf deleted file mode 100644 index 565d4011..00000000 --- a/Source/non_ip/lan.conf +++ /dev/null @@ -1,28 +0,0 @@ -# $ meta_title Sukka's Ruleset - LAN -# $ meta_description Includes rules for LAN DOMAIN and .local suffix. - -# Add DOMAIN-SUFFIX here anyway, since they always require DNS lookup. -DOMAIN-SUFFIX,local - -# AS112 -# List from https://blog.cloudflare.com/the-as112-project/ -DOMAIN-SUFFIX,home.arpa -DOMAIN-SUFFIX,10.in-addr.arpa -DOMAIN-SUFFIX,16.172.in-addr.arpa -DOMAIN-SUFFIX,17.172.in-addr.arpa -DOMAIN-SUFFIX,18.172.in-addr.arpa -DOMAIN-SUFFIX,19.172.in-addr.arpa -DOMAIN-SUFFIX,20.172.in-addr.arpa -DOMAIN-SUFFIX,21.172.in-addr.arpa -DOMAIN-SUFFIX,22.172.in-addr.arpa -DOMAIN-SUFFIX,23.172.in-addr.arpa -DOMAIN-SUFFIX,24.172.in-addr.arpa -DOMAIN-SUFFIX,25.172.in-addr.arpa -DOMAIN-SUFFIX,26.172.in-addr.arpa -DOMAIN-SUFFIX,27.172.in-addr.arpa -DOMAIN-SUFFIX,28.172.in-addr.arpa -DOMAIN-SUFFIX,29.172.in-addr.arpa -DOMAIN-SUFFIX,30.172.in-addr.arpa -DOMAIN-SUFFIX,31.172.in-addr.arpa -DOMAIN-SUFFIX,168.192.in-addr.arpa -DOMAIN-SUFFIX,254.169.in-addr.arpa