diff --git a/Build/build-cloudmounter-rules.ts b/Build/build-cloudmounter-rules.ts new file mode 100644 index 00000000..f8a2f822 --- /dev/null +++ b/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(); +} diff --git a/Build/index.ts b/Build/index.ts index 229c4e38..0cca7854 100644 --- a/Build/index.ts +++ b/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 ]); diff --git a/Build/lib/create-file.ts b/Build/lib/create-file.ts index 495a7d66..eec909ea 100644 --- a/Build/lib/create-file.ts +++ b/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); diff --git a/Source/non_ip/cloudmounter.ts b/Source/non_ip/cloudmounter.ts new file mode 100644 index 00000000..b29aec54 --- /dev/null +++ b/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' +]; diff --git a/tsconfig.json b/tsconfig.json index cd4fa176..dd03ad8f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,7 @@ }, "include": [ "./Source/**/*.js", - "./Build/**/*.ts" + "./Build/**/*.ts", + "Source/**/*.ts" ] }