mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-12 17:20:35 +08:00
Fix: validate global now supports DOMAIN-KEYWORD
This commit is contained in:
parent
07725d6c00
commit
9ebb1db9f7
@ -5,7 +5,9 @@ import { processLine } from './process-line';
|
|||||||
export default async function runAgainstSourceFile(
|
export default async function runAgainstSourceFile(
|
||||||
filePath: string,
|
filePath: string,
|
||||||
callback: (domain: string, includeAllSubDomain: boolean) => void,
|
callback: (domain: string, includeAllSubDomain: boolean) => void,
|
||||||
type?: 'ruleset' | 'domainset'
|
type?: 'ruleset' | 'domainset',
|
||||||
|
/** Secret keyword collection, only use for special purpose */
|
||||||
|
keywordSet?: Set<string> | null
|
||||||
) {
|
) {
|
||||||
for await (const line of readFileByLine(filePath)) {
|
for await (const line of readFileByLine(filePath)) {
|
||||||
const l = processLine(line);
|
const l = processLine(line);
|
||||||
@ -22,10 +24,22 @@ export default async function runAgainstSourceFile(
|
|||||||
|
|
||||||
if (type === 'ruleset') {
|
if (type === 'ruleset') {
|
||||||
const [ruleType, domain] = l.split(',', 3);
|
const [ruleType, domain] = l.split(',', 3);
|
||||||
if (ruleType === 'DOMAIN') {
|
switch (ruleType) {
|
||||||
callback(domain, false);
|
case 'DOMAIN': {
|
||||||
} else if (ruleType === 'DOMAIN-SUFFIX') {
|
callback(domain, false);
|
||||||
callback(domain, true);
|
break;
|
||||||
|
}
|
||||||
|
case 'DOMAIN-SUFFIX': {
|
||||||
|
callback(domain, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'DOMAIN-KEYWORD': {
|
||||||
|
if (keywordSet) {
|
||||||
|
keywordSet.add(domain);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// no default
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- exhaus options
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- exhaus options
|
||||||
} else if (type === 'domainset') {
|
} else if (type === 'domainset') {
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { HostnameSmolTrie } from './lib/trie';
|
|||||||
import yauzl from 'yauzl-promise';
|
import yauzl from 'yauzl-promise';
|
||||||
import { fetchRemoteTextByLine } from './lib/fetch-text-by-line';
|
import { fetchRemoteTextByLine } from './lib/fetch-text-by-line';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { OUTPUT_SURGE_DIR } from './constants/dir';
|
import { OUTPUT_SURGE_DIR, SOURCE_DIR } from './constants/dir';
|
||||||
import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
|
import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
|
||||||
import { $$fetch } from './lib/fetch-retry';
|
import { $$fetch } from './lib/fetch-retry';
|
||||||
import runAgainstSourceFile from './lib/run-against-source-file';
|
import runAgainstSourceFile from './lib/run-against-source-file';
|
||||||
@ -112,15 +112,16 @@ export async function parseGfwList() {
|
|||||||
|
|
||||||
const callback = (domain: string, includeAllSubdomain: boolean) => {
|
const callback = (domain: string, includeAllSubdomain: boolean) => {
|
||||||
gfwListTrie.whitelist(domain, includeAllSubdomain);
|
gfwListTrie.whitelist(domain, includeAllSubdomain);
|
||||||
|
topDomainTrie.whitelist(domain, includeAllSubdomain);
|
||||||
};
|
};
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
runAgainstSourceFile(path.join(OUTPUT_SURGE_DIR, 'non_ip/global.conf'), callback, 'ruleset'),
|
runAgainstSourceFile(path.join(SOURCE_DIR, 'non_ip/global.conf'), callback, 'ruleset', keywordSet),
|
||||||
runAgainstSourceFile(path.join(OUTPUT_SURGE_DIR, 'non_ip/reject.conf'), callback, 'ruleset'),
|
runAgainstSourceFile(path.join(OUTPUT_SURGE_DIR, 'non_ip/domestic.conf'), callback, 'ruleset', keywordSet),
|
||||||
runAgainstSourceFile(path.join(OUTPUT_SURGE_DIR, 'non_ip/telegram.conf'), callback, 'ruleset'),
|
runAgainstSourceFile(path.join(SOURCE_DIR, 'non_ip/reject.conf'), callback, 'ruleset', keywordSet),
|
||||||
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'non_ip/stream.conf'), callback, 'ruleset'),
|
runAgainstSourceFile(path.join(SOURCE_DIR, 'non_ip/telegram.conf'), callback, 'ruleset', keywordSet),
|
||||||
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'non_ip/ai.conf'), callback, 'ruleset'),
|
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'non_ip/stream.conf'), callback, 'ruleset', keywordSet),
|
||||||
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'non_ip/microsoft.conf'), callback, 'ruleset'),
|
runAgainstSourceFile(path.resolve(SOURCE_DIR, 'non_ip/ai.conf'), callback, 'ruleset', keywordSet),
|
||||||
|
runAgainstSourceFile(path.resolve(SOURCE_DIR, 'non_ip/microsoft.conf'), callback, 'ruleset', keywordSet),
|
||||||
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'domainset/reject.conf'), callback, 'domainset'),
|
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'domainset/reject.conf'), callback, 'domainset'),
|
||||||
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'domainset/reject_extra.conf'), callback, 'domainset'),
|
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'domainset/reject_extra.conf'), callback, 'domainset'),
|
||||||
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'domainset/cdn.conf'), callback, 'domainset')
|
runAgainstSourceFile(path.resolve(OUTPUT_SURGE_DIR, 'domainset/cdn.conf'), callback, 'domainset')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user