clash.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { domainWildCardToRegex, identity } from './misc';
  2. import { isProbablyIpv4, isProbablyIpv6 } from './is-fast-ip';
  3. const unsupported = Symbol('unsupported');
  4. // https://dreamacro.github.io/clash/configuration/rules.html
  5. export const PROCESSOR: Record<string, ((raw: string, type: string, value: string) => string) | typeof unsupported> = {
  6. DOMAIN: identity,
  7. 'DOMAIN-SUFFIX': identity,
  8. 'DOMAIN-KEYWORD': identity,
  9. 'DOMAIN-WILDCARD': (_raw, _type, value) => `DOMAIN-REGEX,${domainWildCardToRegex(value)}`,
  10. GEOIP: identity,
  11. 'IP-CIDR': identity,
  12. 'IP-CIDR6': identity,
  13. 'IP-ASN': identity,
  14. 'SRC-IP': (_raw, _type, value) => {
  15. if (value.includes('/')) {
  16. return `SRC-IP-CIDR,${value}`;
  17. }
  18. if (isProbablyIpv4(value)) {
  19. return `SRC-IP-CIDR,${value}/32`;
  20. }
  21. if (isProbablyIpv6(value)) {
  22. return `SRC-IP-CIDR6,${value}/128`;
  23. }
  24. return '';
  25. },
  26. 'SRC-IP-CIDR': identity,
  27. 'SRC-PORT': identity,
  28. 'DST-PORT': identity,
  29. 'PROCESS-NAME': (_raw, _type, value) => ((value.includes('/') || value.includes('\\')) ? `PROCESS-PATH,${value}` : `PROCESS-NAME,${value}`),
  30. 'DEST-PORT': (_raw, _type, value) => `DST-PORT,${value}`,
  31. 'IN-PORT': (_raw, _type, value) => `SRC-PORT,${value}`,
  32. 'URL-REGEX': unsupported,
  33. 'USER-AGENT': unsupported
  34. };