瀏覽代碼

Add CloudMounter Rules

SukkaW 2 年之前
父節點
當前提交
611dc7183a
共有 5 個文件被更改,包括 51 次插入3 次删除
  1. 34 0
      Build/build-cloudmounter-rules.ts
  2. 4 0
      Build/index.ts
  3. 2 2
      Build/lib/create-file.ts
  4. 9 0
      Source/non_ip/cloudmounter.ts
  5. 2 1
      tsconfig.json

+ 34 - 0
Build/build-cloudmounter-rules.ts

@@ -0,0 +1,34 @@
+import path from 'path';
+import { DOMAINS, PROCESS_NAMES } from '../Source/non_ip/cloudmounter';
+import { SHARED_DESCRIPTION } from './lib/constants';
+import { createRuleset } from './lib/create-file';
+import { task } from './lib/trace-runner';
+
+const outputSurgeDir = path.resolve(import.meta.dir, '../List');
+const outputClashDir = path.resolve(import.meta.dir, '../Clash');
+
+export const buildCloudMounterRules = task(import.meta.path, async () => {
+  // AND,((SRC-IP,192.168.1.110), (DOMAIN, example.com))
+
+  const results = DOMAINS.flatMap(domain => {
+    return PROCESS_NAMES.map(process => {
+      return `AND,((DOMAIN-SUFFIX,${domain}), (PROCESS-NAME, ${process}))`;
+    });
+  });
+
+  const description = SHARED_DESCRIPTION;
+
+  return Promise.all(createRuleset(
+    'Sukka\'s Ruleset - CloudMounter / RaiDrive',
+    description,
+    new Date(),
+    results,
+    'domainset',
+    path.resolve(outputSurgeDir, 'non_ip', 'cloudmounter.conf'),
+    path.resolve(outputClashDir, 'non_ip', 'cloudmounter.txt')
+  ));
+});
+
+if (import.meta.main) {
+  buildCloudMounterRules();
+}

+ 4 - 0
Build/index.ts

@@ -24,6 +24,7 @@ import { buildPublic } from './build-public';
 import { downloadMockAssets } from './download-mock-assets';
 
 import type { TaskResult } from './lib/trace-runner';
+import { buildCloudMounterRules } from './build-cloudmounter-rules';
 
 (async () => {
   console.log('Bun version:', Bun.version, Bun.revision);
@@ -74,6 +75,8 @@ import type { TaskResult } from './lib/trace-runner';
 
     const downloadMockAssetsPromise = downloadMockAssets();
 
+    const buildCloudMounterRulesPromise = downloadPreviousBuildPromise.then(() => buildCloudMounterRules());
+
     const stats = await Promise.all([
       downloadPreviousBuildPromise,
       buildCommonPromise,
@@ -93,6 +96,7 @@ import type { TaskResult } from './lib/trace-runner';
       buildStreamServicePromise,
       buildMicrosoftCdnPromise,
       buildSSPanelUIMAppProfilePromise,
+      buildCloudMounterRulesPromise,
       downloadMockAssetsPromise
     ]);
 

+ 2 - 2
Build/lib/create-file.ts

@@ -82,7 +82,7 @@ export async function compareAndWriteFile(linesA: string[], filePath: string) {
   }, picocolors.gray);
 }
 
-export const withBannerArray = (title: string, description: string[], date: Date, content: string[]) => {
+export const withBannerArray = (title: string, description: string[] | readonly string[], date: Date, content: string[]) => {
   return [
     '#########################################',
     `# ${title}`,
@@ -96,7 +96,7 @@ export const withBannerArray = (title: string, description: string[], date: Date
 };
 
 export const createRuleset = (
-  title: string, description: string[], date: Date, content: string[],
+  title: string, description: string[] | readonly string[], date: Date, content: string[],
   type: 'ruleset' | 'domainset', surgePath: string, clashPath: string
 ) => {
   const surgeContent = withBannerArray(title, description, date, content);

+ 9 - 0
Source/non_ip/cloudmounter.ts

@@ -0,0 +1,9 @@
+export const DOMAINS = [
+  'DOMAIN-SUFFIX,sharepoint.com',
+  'DOMAIN,www.googleapis.com'
+];
+
+export const PROCESS_NAMES = [
+  'CloudMounter'
+  // 'RaiDrive'
+];

+ 2 - 1
tsconfig.json

@@ -17,6 +17,7 @@
   },
   "include": [
     "./Source/**/*.js",
-    "./Build/**/*.ts"
+    "./Build/**/*.ts",
+    "Source/**/*.ts"
   ]
 }