(node, platform, flags = {})
| 3313 | } |
| 3314 | // 生成规则 |
| 3315 | function generateRule(node, platform, flags = {}) { |
| 3316 | // 平台特性配置(保持不变) |
| 3317 | const platformFeatures = { |
| 3318 | mihomo: { |
| 3319 | supportsExtendedMatching: true, |
| 3320 | supportsNoResolve: true, |
| 3321 | supportsPreMatching: true, |
| 3322 | supportsSrc: true, |
| 3323 | rejectPolicyRegex: /^REJECT(-[A-Z]+)*$/, |
| 3324 | }, |
| 3325 | surge: { |
| 3326 | supportsExtendedMatching: false, |
| 3327 | supportsNoResolve: true, |
| 3328 | supportsPreMatching: true, |
| 3329 | supportsSrc: false, |
| 3330 | rejectPolicyRegex: /^REJECT(-[A-Z]+)*$/, |
| 3331 | }, |
| 3332 | loon: { |
| 3333 | supportsExtendedMatching: false, |
| 3334 | supportsNoResolve: false, |
| 3335 | supportsPreMatching: false, |
| 3336 | supportsSrc: false, |
| 3337 | rejectPolicyRegex: /^REJECT(-[A-Z]+)*$/, |
| 3338 | }, |
| 3339 | } |
| 3340 | |
| 3341 | const FLAG_SUPPORTED_TYPES = { |
| 3342 | extendedMatching: ['RULE-SET', 'DOMAIN-SET', 'DOMAIN-KEYWORD', 'DOMAIN-SUFFIX', 'DOMAIN', 'URL-REGEX'], |
| 3343 | noResolve: ['IP-CIDR', 'IP-CIDR6', 'GEOIP', 'IP-ASN', 'RULE-SET'], |
| 3344 | src: ['IP-CIDR', 'IP-CIDR6', 'GEOIP', 'IP-ASN', 'IP-SUFFIX'], |
| 3345 | preMatching: [ |
| 3346 | 'DOMAIN', |
| 3347 | 'DOMAIN-SUFFIX', |
| 3348 | 'DOMAIN-KEYWORD', |
| 3349 | 'DOMAIN-SET', |
| 3350 | 'DOMAIN-WILDCARD', |
| 3351 | 'IP-CIDR', |
| 3352 | 'IP-CIDR6', |
| 3353 | 'GEOIP', |
| 3354 | 'IP-ASN', |
| 3355 | 'SUBNET', |
| 3356 | 'DEST-PORT', |
| 3357 | 'SRC-PORT', |
| 3358 | 'SRC-IP', |
| 3359 | 'RULE-SET', |
| 3360 | |
| 3361 | 'AND', |
| 3362 | 'OR', |
| 3363 | 'NOT', |
| 3364 | ], |
| 3365 | } |
| 3366 | |
| 3367 | const LOGICAL_OPERATORS_ARITY = { |
| 3368 | AND: 'n', |
| 3369 | OR: 'n', |
| 3370 | NOT: 1, |
| 3371 | } |
| 3372 |
no test coverage detected