Skip to content

Commit

Permalink
Merge branch 'SukkaW:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
FYLSen authored Sep 15, 2024
2 parents e8b2f22 + 5247ef2 commit 245bb16
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 24 deletions.
2 changes: 1 addition & 1 deletion Build/build-cloudmounter-rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export const buildCloudMounterRules = task(require.main === module, __filename)(
`AND,((${domain}),(PROCESS-NAME,${process}))`,
...[
'10.0.0.0/8',
'127.0.0.0/8',
// '127.0.0.0/8',
'172.16.0.0/12',
'192.168.0.0/16'
].map(cidr => `AND,((${domain}),(SRC-IP,${cidr}))`)
Expand Down
20 changes: 15 additions & 5 deletions Build/build-internal-reverse-chn-cidr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import { exclude, merge } from 'fast-cidr-tools';
import { getChnCidrPromise } from './build-chn-cidr';
import { NON_CN_CIDR_INCLUDED_IN_CHNROUTE, RESERVED_IPV4_CIDR } from './constants/cidr';

import { writeFile } from './lib/misc';
import fs from 'node:fs';
import { OUTPUT_INTERNAL_DIR } from './constants/dir';
import { asyncWriteToStream } from './lib/async-write-to-stream';
import { mkdirp } from './lib/misc';

export const buildInternalReverseChnCIDR = task(require.main === module, __filename)(async () => {
const [cidr] = await getChnCidrPromise();
Expand All @@ -23,9 +25,17 @@ export const buildInternalReverseChnCIDR = task(require.main === module, __filen
);

const outputFile = path.join(OUTPUT_INTERNAL_DIR, 'reversed-chn-cidr.txt');
await mkdirp(OUTPUT_INTERNAL_DIR);

return writeFile(
outputFile,
reversedCidr.join('\n') + '\n'
);
const writeStream = fs.createWriteStream(outputFile);
for (const line of reversedCidr) {
const p = asyncWriteToStream(writeStream, line + '\n');
if (p) {
// eslint-disable-next-line no-await-in-loop -- stream high water mark
await p;
}
}
await asyncWriteToStream(writeStream, '\n');

writeStream.end();
});
6 changes: 3 additions & 3 deletions Build/build-public.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { treeDir } from './lib/tree-dir';
import type { TreeType, TreeTypeArray } from './lib/tree-dir';

import { OUTPUT_MOCK_DIR, OUTPUT_MODULES_DIR, PUBLIC_DIR, ROOT_DIR } from './constants/dir';
import { writeFile } from './lib/misc';
import { mkdirp, writeFile } from './lib/misc';
import picocolors from 'picocolors';

const mockDir = path.join(ROOT_DIR, 'Mock');
Expand All @@ -32,8 +32,8 @@ const copyDirContents = async (srcDir: string, destDir: string) => {
export const buildPublic = task(require.main === module, __filename)(async (span) => {
await span.traceChildAsync('copy rest of the files', async () => {
await Promise.all([
fsp.mkdir(OUTPUT_MODULES_DIR, { recursive: true }),
fsp.mkdir(OUTPUT_MOCK_DIR, { recursive: true })
mkdirp(OUTPUT_MODULES_DIR),
mkdirp(OUTPUT_MOCK_DIR)
]);

await Promise.all([
Expand Down
5 changes: 3 additions & 2 deletions Build/download-mock-assets.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { task } from './trace';
import path from 'node:path';
import fs from 'node:fs';
import fsp from 'node:fs/promises';
import { Readable } from 'node:stream';
import { pipeline } from 'node:stream/promises';
import { fetchWithRetry } from './lib/fetch-retry';
import { OUTPUT_MOCK_DIR } from './constants/dir';
import { mkdirp } from './lib/misc';

const ASSETS_LIST = {
'www-google-analytics-com_ga.js': 'https://raw.githubusercontent.com/AdguardTeam/Scriptlets/master/dist/redirect-files/google-analytics-ga.js',
Expand All @@ -25,7 +25,8 @@ export const downloadMockAssets = task(require.main === module, __filename)((spa
throw new Error(`Empty body from ${url}`);
}

await fsp.mkdir(OUTPUT_MOCK_DIR, { recursive: true });
await mkdirp(OUTPUT_MOCK_DIR);

return pipeline(
Readable.fromWeb(res.body),
fs.createWriteStream(src, 'utf-8')
Expand Down
9 changes: 9 additions & 0 deletions Build/lib/async-write-to-stream.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { Writable } from 'node:stream';
import { once } from 'node:events';

export const asyncWriteToStream = <T>(stream: Writable, chunk: T) => {
const res = stream.write(chunk);
if (!res) {
return once(stream, 'drain'); // returns a promise only if needed
}
};
3 changes: 2 additions & 1 deletion Build/lib/convert-clash-meta-mrs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import zlib from 'node:zlib';
import process from 'node:process';

import { async as ezspawn } from '@jsdevtools/ez-spawn';
import { mkdirp } from './misc';

const mihomoBinaryDir = path.join(__dirname, '../../node_modules/.cache/mihomo');
const mihomoBinaryPath = path.join(mihomoBinaryDir, 'mihomo');
Expand All @@ -22,7 +23,7 @@ const mihomoBinaryUrl: Partial<Record<NodeJS.Platform, Partial<Record<NodeJS.Arc
};

const ensureMihomoBinary = async () => {
await fsp.mkdir(mihomoBinaryDir, { recursive: true });
await mkdirp(mihomoBinaryDir);
if (!fs.existsSync(mihomoBinaryPath)) {
const writeStream = fs.createWriteStream(mihomoBinaryPath);

Expand Down
28 changes: 18 additions & 10 deletions Build/lib/create-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import stringify from 'json-stringify-pretty-compact';
import { ipCidrListToSingbox, surgeDomainsetToSingbox, surgeRulesetToSingbox } from './singbox';
import { createTrie } from './trie';
import { pack, unpackFirst, unpackSecond } from './bitwise';
import { asyncWriteToStream } from './async-write-to-stream';

export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
let isEqual = true;
Expand Down Expand Up @@ -67,17 +68,24 @@ export async function compareAndWriteFile(span: Span, linesA: string[], filePath
}

await span.traceChildAsync(`writing ${filePath}`, async () => {
// if (linesALen < 10000) {
return writeFile(filePath, fastStringArrayJoin(linesA, '\n') + '\n');
// }
// const writer = file.writer();

// for (let i = 0; i < linesALen; i++) {
// writer.write(linesA[i]);
// writer.write('\n');
// }
// The default highwater mark is normally 16384,
// So we make sure direct write to file if the content is
// most likely less than 500 lines
if (linesALen < 500) {
return writeFile(filePath, fastStringArrayJoin(linesA, '\n') + '\n');
}

// return writer.end();
const writeStream = fs.createWriteStream(filePath);
for (let i = 0; i < linesALen; i++) {
let p = asyncWriteToStream(writeStream, linesA[i]);
// eslint-disable-next-line no-await-in-loop -- stream high water mark
if (p) await p;
p = asyncWriteToStream(writeStream, '\n');
// eslint-disable-next-line no-await-in-loop -- stream high water mark
if (p) await p;
}
await asyncWriteToStream(writeStream, '\n');
writeStream.end();
});
}

Expand Down
12 changes: 10 additions & 2 deletions Build/lib/misc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,17 @@ interface Write {
): Promise<unknown>
}

export const mkdirp = (dir: string) => {
if (fs.existsSync(dir)) {
return;
}
return fsp.mkdir(dir, { recursive: true });
};

export const writeFile: Write = async (destination: string, input, dir = dirname(destination)) => {
if (!fs.existsSync(dir)) {
await fsp.mkdir(dir, { recursive: true });
const p = mkdirp(dir);
if (p) {
await p;
}
return fsp.writeFile(destination, input, { encoding: 'utf-8' });
};
Expand Down
1 change: 1 addition & 0 deletions Source/domainset/download.conf
Original file line number Diff line number Diff line change
Expand Up @@ -356,3 +356,4 @@ ciscobinary.openh264.org
update.sleazyfork.org
updates.istatmenus.app
download.maxmind.com
downloader.cursor.sh

0 comments on commit 245bb16

Please sign in to comment.