Browse Source

Chore: enable `microsoft_cdn` build / refine Clash transformation

SukkaW 2 years ago
parent
commit
c9c23ee127
2 changed files with 17 additions and 0 deletions
  1. 4 0
      Build/index.ts
  2. 13 0
      Build/lib/clash.ts

+ 4 - 0
Build/index.ts

@@ -14,6 +14,7 @@ import { buildStreamService } from './build-stream-service';
 import { buildRedirectModule } from './build-redirect-module';
 import { validate } from './validate-domainset';
 
+import { buildMicrosoftCdn } from './build-microsoft-cdn';
 import { buildSSPanelUIMAppProfile } from './build-sspanel-appprofile';
 
 import { buildPublic } from './build-public';
@@ -67,6 +68,8 @@ import { downloadMockAssets } from './download-mock-assets';
     const buildRedirectModulePromise = downloadPreviousBuildPromise.then(() => buildRedirectModule());
     const buildStreamServicePromise = downloadPreviousBuildPromise.then(() => buildStreamService());
 
+    const buildMicrosoftCdnPromise = downloadPreviousBuildPromise.then(() => buildMicrosoftCdn());
+
     const buildSSPanelUIMAppProfilePromise = Promise.all([
       downloadPreviousBuildPromise
     ]).then(() => buildSSPanelUIMAppProfile());
@@ -90,6 +93,7 @@ import { downloadMockAssets } from './download-mock-assets';
       buildDomesticRulesetPromise,
       buildRedirectModulePromise,
       buildStreamServicePromise,
+      buildMicrosoftCdnPromise,
       buildSSPanelUIMAppProfilePromise,
 
       downloadMockAssetsPromise

+ 13 - 0
Build/lib/clash.ts

@@ -16,10 +16,23 @@ const CLASH_SUPPORTED_RULE_TYPE = [
   'PROCESS-PATH'
 ];
 
+const REQUIRE_REWRITE = {
+  'DEST-PORT': 'DST-PORT',
+  'IN-PORT': 'SRC-PORT'
+} as const;
+
 export const surgeRulesetToClashClassicalTextRuleset = (rules: string[] | Set<string>) => {
   const trie = Trie.from(rules);
+
   return CLASH_SUPPORTED_RULE_TYPE.flatMap(
     type => trie.find(`${type},`)
+  ).concat(
+    Object.keys(REQUIRE_REWRITE).flatMap(
+      (type) => {
+        const found = trie.find(`${type},`);
+        return found.map(line => `${REQUIRE_REWRITE[type as keyof typeof REQUIRE_REWRITE]}${line.slice(type.length)}`);
+      }
+    )
   );
 };