diff --git a/Build/build-internal-reverse-chn-cidr.ts b/Build/build-internal-reverse-chn-cidr.ts index 3ba1c10b..a1f28c25 100644 --- a/Build/build-internal-reverse-chn-cidr.ts +++ b/Build/build-internal-reverse-chn-cidr.ts @@ -9,20 +9,20 @@ import fs from 'node:fs'; import { OUTPUT_INTERNAL_DIR } from './constants/dir'; import { asyncWriteToStream } from './lib/async-write-to-stream'; import { mkdirp } from './lib/misc'; +import { appendArrayInPlace } from './lib/append-array-in-place'; export const buildInternalReverseChnCIDR = task(require.main === module, __filename)(async () => { const [cidr] = await getChnCidrPromise(); - const reversedCidr = merge( + const reversedCidr = merge(appendArrayInPlace( exclude( ['0.0.0.0/0'], RESERVED_IPV4_CIDR.concat(cidr), true - ).concat( - // https://github.com/misakaio/chnroutes2/issues/25 - NON_CN_CIDR_INCLUDED_IN_CHNROUTE - ) - ); + ), + // https://github.com/misakaio/chnroutes2/issues/25 + NON_CN_CIDR_INCLUDED_IN_CHNROUTE + )); const outputFile = path.join(OUTPUT_INTERNAL_DIR, 'reversed-chn-cidr.txt'); await mkdirp(OUTPUT_INTERNAL_DIR); diff --git a/Build/build-sgmodule-always-realip.ts b/Build/build-sgmodule-always-realip.ts index 54bdd640..46db005b 100644 --- a/Build/build-sgmodule-always-realip.ts +++ b/Build/build-sgmodule-always-realip.ts @@ -5,6 +5,7 @@ import { DIRECTS, LANS } from '../Source/non_ip/direct'; import * as yaml from 'yaml'; import { writeFile } from './lib/misc'; import { OUTPUT_INTERNAL_DIR, OUTPUT_MODULES_DIR } from './constants/dir'; +import { appendArrayInPlace } from './lib/append-array-in-place'; const HOSTNAMES = [ // Network Detection, Captive Portal @@ -48,7 +49,7 @@ export const buildAlwaysRealIPModule = task(require.main === module, __filename) // Intranet, Router Setup, and mant more const dataset = [Object.entries(DIRECTS), Object.entries(LANS)]; const surge = dataset.flatMap(data => data.flatMap(([, { domains }]) => domains.flatMap((domain) => [`*.${domain}`, domain]))); - const clash = dataset.flatMap(data => data.flatMap(([, { domains }]) => domains.map((domain) => `+.${domain}`))); + const clash = ; return Promise.all([ compareAndWriteFile( @@ -67,7 +68,10 @@ export const buildAlwaysRealIPModule = task(require.main === module, __filename) yaml.stringify( { dns: { - 'fake-ip-filter': HOSTNAMES.concat(clash) + 'fake-ip-filter': appendArrayInPlace( + dataset.flatMap(data => data.flatMap(([, { domains }]) => domains.map((domain) => `+.${domain}`))), + HOSTNAMES + ) } }, { version: '1.1' } diff --git a/Build/lib/rules/ruleset.ts b/Build/lib/rules/ruleset.ts index 064c5d34..6b36fede 100644 --- a/Build/lib/rules/ruleset.ts +++ b/Build/lib/rules/ruleset.ts @@ -97,7 +97,7 @@ export class RulesetOutput extends RuleOutput { const singbox: SingboxSourceFormat = { version: 2, rules: [{ - domain: ['this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'].concat(this.computed()[0]), + domain: appendArrayInPlace(['this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'], this.computed()[0]), domain_suffix: this.computed()[1], domain_keyword: Array.from(this.domainKeywords), domain_regex: Array.from(this.domainWildcard).map(RuleOutput.domainWildCardToRegex), diff --git a/Build/lib/singbox.ts b/Build/lib/singbox.ts index d2b07427..4e5d26a0 100644 --- a/Build/lib/singbox.ts +++ b/Build/lib/singbox.ts @@ -1,4 +1,3 @@ -import { domainWildCardToRegex } from './misc'; import { isProbablyIpv4, isProbablyIpv6 } from './is-fast-ip'; const unsupported = Symbol('unsupported'); @@ -10,13 +9,6 @@ const toNumberTuple = (key: T, value: string): [T, number] | n // https://sing-box.sagernet.org/configuration/rule-set/source-format/ export const PROCESSOR: Record [key: keyof SingboxHeadlessRule, value: Required[keyof SingboxHeadlessRule][number]] | null) | typeof unsupported> = { - DOMAIN: (_1, _2, value) => ['domain', value], - 'DOMAIN-SUFFIX': (_1, _2, value) => ['domain_suffix', value], - 'DOMAIN-KEYWORD': (_1, _2, value) => ['domain_keyword', value], - 'DOMAIN-WILDCARD': (_1, _2, value) => ['domain_regex', domainWildCardToRegex(value)], - GEOIP: unsupported, - 'IP-CIDR': (_1, _2, value) => ['ip_cidr', value.endsWith(',no-resolve') ? value.slice(0, -11) : value], - 'IP-CIDR6': (_1, _2, value) => ['ip_cidr', value.endsWith(',no-resolve') ? value.slice(0, -11) : value], 'IP-ASN': unsupported, 'SRC-IP': (_1, _2, value) => { if (value.includes('/')) {