|
@@ -1,4 +1,3 @@
|
|
|
-import { domainWildCardToRegex } from './misc';
|
|
|
|
|
import { isProbablyIpv4, isProbablyIpv6 } from './is-fast-ip';
|
|
import { isProbablyIpv4, isProbablyIpv6 } from './is-fast-ip';
|
|
|
|
|
|
|
|
const unsupported = Symbol('unsupported');
|
|
const unsupported = Symbol('unsupported');
|
|
@@ -10,13 +9,6 @@ const toNumberTuple = <T extends string>(key: T, value: string): [T, number] | n
|
|
|
|
|
|
|
|
// https://sing-box.sagernet.org/configuration/rule-set/source-format/
|
|
// https://sing-box.sagernet.org/configuration/rule-set/source-format/
|
|
|
export const PROCESSOR: Record<string, ((raw: string, type: string, value: string) => [key: keyof SingboxHeadlessRule, value: Required<SingboxHeadlessRule>[keyof SingboxHeadlessRule][number]] | null) | typeof unsupported> = {
|
|
export const PROCESSOR: Record<string, ((raw: string, type: string, value: string) => [key: keyof SingboxHeadlessRule, value: Required<SingboxHeadlessRule>[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,
|
|
'IP-ASN': unsupported,
|
|
|
'SRC-IP': (_1, _2, value) => {
|
|
'SRC-IP': (_1, _2, value) => {
|
|
|
if (value.includes('/')) {
|
|
if (value.includes('/')) {
|