Skip to content

Commit b42bd05

Browse files
committed
Perf: reduce infra runtime costs
1 parent 0a4c99a commit b42bd05

23 files changed

+172
-265
lines changed

Build/build-anti-bogus-domain.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ const { isIPv4, isIPv6 } = require('net');
44
const { createRuleset } = require('./lib/create-file');
55
const { fetchRemoteTextAndCreateReadlineInterface, readFileByLine } = require('./lib/fetch-remote-text-by-line');
66
const { processLine } = require('./lib/process-line');
7-
const { runner } = require('./lib/trace-runner');
7+
const { runner, task } = require('./lib/trace-runner');
88

9-
const buildAntiBogusDomain = async () => {
9+
const buildAntiBogusDomain = task(__filename, async () => {
1010
/** @type {string[]} */
1111
const res = [];
1212
for await (const line of await fetchRemoteTextAndCreateReadlineInterface('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/bogus-nxdomain.china.conf')) {
@@ -56,7 +56,7 @@ const buildAntiBogusDomain = async () => {
5656
path.resolve(__dirname, '../List/ip/reject.conf'),
5757
path.resolve(__dirname, '../Clash/ip/reject.txt')
5858
));
59-
};
59+
});
6060

6161
module.exports.buildAntiBogusDomain = buildAntiBogusDomain;
6262

Build/build-apple-cdn.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
const path = require('path');
22
const { createRuleset } = require('./lib/create-file');
33
const { parseFelixDnsmasq } = require('./lib/parse-dnsmasq');
4-
const { runner } = require('./lib/trace-runner');
4+
const { runner, task } = require('./lib/trace-runner');
55

6-
const buildAppleCdn = async () => {
6+
const buildAppleCdn = task(__filename, async () => {
77
const res = await parseFelixDnsmasq('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/apple.china.conf');
88

99
const description = [
@@ -40,7 +40,7 @@ const buildAppleCdn = async () => {
4040
path.resolve(__dirname, '../Clash/domainset/apple_cdn.txt')
4141
)
4242
]);
43-
};
43+
});
4444

4545
module.exports.buildAppleCdn = buildAppleCdn;
4646

Build/build-cdn-conf.js

+19-9
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ const path = require('path');
33
const { createRuleset } = require('./lib/create-file');
44
const { fetchRemoteTextAndCreateReadlineInterface, readFileByLine } = require('./lib/fetch-remote-text-by-line');
55
const Trie = require('./lib/trie');
6-
const { runner } = require('./lib/trace-runner');
6+
const { runner, task } = require('./lib/trace-runner');
77
const fs = require('fs');
88
const { processLine } = require('./lib/process-line');
99

10-
const publicSuffixPath = path.resolve(__dirname, '../node_modules/.cache/public_suffix-list_dat.txt');
10+
const publicSuffixPath = path.resolve(__dirname, '../node_modules/.cache/public_suffix_list_dat.txt');
1111

12-
const buildCdnConf = async () => {
12+
const buildCdnConf = task(__filename, async () => {
1313
const trie = new Trie();
1414

1515
if (fs.existsSync(publicSuffixPath)) {
@@ -30,23 +30,33 @@ const buildCdnConf = async () => {
3030
const S3OSSDomains = new Set();
3131

3232
trie.find('.amazonaws.com').forEach(line => {
33-
if ((line.startsWith('s3-') || line.startsWith('s3.')) && !line.includes('cn-')) {
33+
if (
34+
(line.startsWith('s3-') || line.startsWith('s3.'))
35+
&& !line.includes('cn-')
36+
) {
3437
S3OSSDomains.add(line);
3538
}
3639
});
3740
trie.find('.scw.cloud').forEach(line => {
38-
if ((line.startsWith('s3-') || line.startsWith('s3.')) && !line.includes('cn-')) {
41+
if (
42+
(line.startsWith('s3-') || line.startsWith('s3.'))
43+
&& !line.includes('cn-')
44+
) {
3945
S3OSSDomains.add(line);
4046
}
4147
});
4248

4349
/** @type {string[]} */
4450
const cdnDomainsList = [];
4551
for await (const l of readFileByLine(path.resolve(__dirname, '../Source/non_ip/cdn.conf'))) {
52+
if (l === '# --- [AWS S3 Replace Me] ---') {
53+
console.log(S3OSSDomains);
54+
S3OSSDomains.forEach(domain => {
55+
cdnDomainsList.push(`DOMAIN-SUFFIX,${domain}`);
56+
});
57+
}
4658
const line = processLine(l);
47-
if (line === '# --- [AWS S3 Replace Me] ---') {
48-
S3OSSDomains.forEach(domain => cdnDomainsList.push(`DOMAIN-SUFFIX,${domain}`));
49-
} else if (line) {
59+
if (line) {
5060
cdnDomainsList.push(line);
5161
}
5262
}
@@ -68,7 +78,7 @@ const buildCdnConf = async () => {
6878
path.resolve(__dirname, '../List/non_ip/cdn.conf'),
6979
path.resolve(__dirname, '../Clash/non_ip/cdn.txt')
7080
));
71-
};
81+
});
7282

7383
module.exports.buildCdnConf = buildCdnConf;
7484

Build/build-chn-cidr.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ const { resolve: pathResolve } = require('path');
44
// This should not use `createRuleset` API since we are going to generate ipcidr for Clash
55
const { compareAndWriteFile, withBannerArray } = require('./lib/create-file');
66
const { processLine } = require('./lib/process-line');
7-
const { runner } = require('./lib/trace-runner');
7+
const { runner, task } = require('./lib/trace-runner');
88

99
// https://github.com/misakaio/chnroutes2/issues/25
1010
const EXCLUDE_CIDRS = [
1111
'223.118.0.0/15',
1212
'223.120.0.0/15'
1313
];
1414

15-
const buildChnCidr = async () => {
15+
const buildChnCidr = task(__filename, async () => {
1616
const { exclude: excludeCidrs } = await import('cidr-tools-wasm');
1717

1818
/** @type {string[]} */
@@ -56,7 +56,7 @@ const buildChnCidr = async () => {
5656
pathResolve(__dirname, '../Clash/ip/china_ip.txt')
5757
)
5858
]);
59-
};
59+
});
6060

6161
module.exports.buildChnCidr = buildChnCidr;
6262

Build/build-common.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const { readFileByLine } = require('./lib/fetch-remote-text-by-line');
66
const { processLine } = require('./lib/process-line');
77
const { createRuleset } = require('./lib/create-file');
88
const { domainDeduper } = require('./lib/domain-deduper');
9-
const { runner } = require('./lib/trace-runner');
9+
const { runner, task } = require('./lib/trace-runner');
1010

1111
const MAGIC_COMMAND_SKIP = '# $ custom_build_script';
1212
const MAGIC_COMMAND_TITLE = '# $ meta_title ';
@@ -16,7 +16,7 @@ const sourceDir = path.resolve(__dirname, '../Source');
1616
const outputSurgeDir = path.resolve(__dirname, '../List');
1717
const outputClashDir = path.resolve(__dirname, '../Clash');
1818

19-
const buildCommon = async () => {
19+
const buildCommon = task(__filename, async () => {
2020
/** @type {Promise<void>[]} */
2121
const promises = [];
2222

@@ -43,7 +43,7 @@ const buildCommon = async () => {
4343
}
4444

4545
return Promise.all(promises);
46-
};
46+
});
4747

4848
module.exports.buildCommon = buildCommon;
4949

Build/build-domestic-ruleset.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ const { readFileByLine } = require('./lib/fetch-remote-text-by-line');
55
const { processLine } = require('./lib/process-line');
66
const { compareAndWriteFile, createRuleset } = require('./lib/create-file');
77
const domainSorter = require('./lib/stable-sort-domain');
8-
const { runner } = require('./lib/trace-runner');
8+
const { runner, task } = require('./lib/trace-runner');
99

10-
const buildDomesticRuleset = async () => {
10+
const buildDomesticRuleset = task(__filename, async () => {
1111
const rl = readFileByLine(path.resolve(__dirname, '../Source/non_ip/domestic.conf'));
1212
const results = [];
1313
for await (const l of rl) {
@@ -67,7 +67,7 @@ const buildDomesticRuleset = async () => {
6767
path.resolve(__dirname, '../Modules/sukka_local_dns_mapping.sgmodule')
6868
)
6969
]);
70-
};
70+
});
7171

7272
module.exports.buildDomesticRuleset = buildDomesticRuleset;
7373

Build/build-internal-cdn-rules.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const tldts = require('tldts');
55
const { processLine } = require('./lib/process-line');
66
const { readFileByLine } = require('./lib/fetch-remote-text-by-line');
77
const domainSorter = require('./lib/stable-sort-domain');
8-
const { runner } = require('./lib/trace-runner');
8+
const { runner, task } = require('./lib/trace-runner');
99
const { compareAndWriteFile } = require('./lib/create-file');
1010

1111
/**
@@ -15,7 +15,7 @@ const escapeRegExp = (string) => {
1515
return string.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
1616
};
1717

18-
const buildInternalCDNDomains = async () => {
18+
const buildInternalCDNDomains = task(__filename, async () => {
1919
const set = new Set();
2020
const keywords = new Set();
2121

@@ -87,7 +87,7 @@ const buildInternalCDNDomains = async () => {
8787
],
8888
path.resolve(__dirname, '../List/internal/cdn.txt')
8989
);
90-
};
90+
});
9191

9292
module.exports.buildInternalCDNDomains = buildInternalCDNDomains;
9393

Build/build-internal-chn-domains.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
const path = require('path');
33
const fse = require('fs-extra');
44
const { parseFelixDnsmasq } = require('./lib/parse-dnsmasq');
5-
const { runner } = require('./lib/trace-runner');
5+
const { runner, task } = require('./lib/trace-runner');
66
const { compareAndWriteFile } = require('./lib/create-file');
77

8-
const buildInternalChnDomains = async () => {
8+
const buildInternalChnDomains = task(__filename, async () => {
99
const [result] = await Promise.all([
1010
parseFelixDnsmasq('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf'),
1111
fse.ensureDir(path.resolve(__dirname, '../List/internal'))
@@ -15,7 +15,7 @@ const buildInternalChnDomains = async () => {
1515
result.map(line => `SUFFIX,${line}`),
1616
path.resolve(__dirname, '../List/internal/accelerated-china-domains.txt')
1717
);
18-
};
18+
});
1919

2020
module.exports.buildInternalChnDomains = buildInternalChnDomains;
2121

Build/build-internal-reverse-chn-cidr.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { processLine } = require('./lib/process-line');
44
const path = require('path');
55
const fse = require('fs-extra');
66
const fs = require('fs');
7-
const { runner } = require('./lib/trace-runner');
7+
const { runner, task } = require('./lib/trace-runner');
88

99
const RESERVED_IPV4_CIDR = [
1010
'0.0.0.0/8',
@@ -24,7 +24,7 @@ const RESERVED_IPV4_CIDR = [
2424
'240.0.0.0/4'
2525
];
2626

27-
const buildInternalReverseChnCIDR = async () => {
27+
const buildInternalReverseChnCIDR = task(__filename, async () => {
2828
const { exclude } = await import('cidr-tools-wasm');
2929

3030
/** @type {string[]} */
@@ -47,7 +47,7 @@ const buildInternalReverseChnCIDR = async () => {
4747
path.resolve(__dirname, '../List/internal/reversed-chn-cidr.txt'),
4848
`${reversedCidr.join('\n')}\n`
4949
);
50-
};
50+
});
5151

5252
module.exports.buildInternalReverseChnCIDR = buildInternalReverseChnCIDR;
5353

Build/build-phishing-domainset.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const path = require('path');
44
const { createRuleset } = require('./lib/create-file');
55
const { processLine } = require('./lib/process-line.js');
66
const domainSorter = require('./lib/stable-sort-domain');
7-
const { runner, traceSync } = require('./lib/trace-runner.js');
7+
const { runner, traceSync, task } = require('./lib/trace-runner.js');
88

99
const WHITELIST_DOMAIN = new Set([
1010
'w3s.link',
@@ -60,7 +60,7 @@ const BLACK_TLD = new Set([
6060
'com.cn'
6161
]);
6262

63-
const buildPhishingDomainSet = async () => {
63+
const buildPhishingDomainSet = task(__filename, async () => {
6464
const domainSet = Array.from((await processFilterRules('https://curbengh.github.io/phishing-filter/phishing-filter-agh.txt')).black);
6565
const domainCountMap = {};
6666

@@ -151,7 +151,7 @@ const buildPhishingDomainSet = async () => {
151151
path.resolve(__dirname, '../List/domainset/reject_phishing.conf'),
152152
path.resolve(__dirname, '../Clash/domainset/reject_phishing.txt')
153153
));
154-
};
154+
});
155155

156156
module.exports.buildPhishingDomainSet = buildPhishingDomainSet;
157157

Build/build-public.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const listDir = require('@sukka/listdir');
22
const path = require('path');
33
const fs = require('fs');
44
const fse = require('fs-extra');
5-
const { runner } = require('./lib/trace-runner');
5+
const { runner, task } = require('./lib/trace-runner');
66

77
const rootPath = path.resolve(__dirname, '../');
88
const publicPath = path.resolve(__dirname, '../public');
@@ -17,7 +17,7 @@ const folderAndFilesToBeDeployed = [
1717
'README.md'
1818
];
1919

20-
const buildPublicHtml = async () => {
20+
const buildPublicHtml = task(__filename, async () => {
2121
await fse.ensureDir(publicPath);
2222
await Promise.all(folderAndFilesToBeDeployed.map(dir => fse.copy(path.resolve(rootPath, dir), path.resolve(publicPath, dir))));
2323

@@ -29,7 +29,7 @@ const buildPublicHtml = async () => {
2929
const html = template(list);
3030

3131
await fs.promises.writeFile(path.join(publicPath, 'index.html'), html, 'utf-8');
32-
};
32+
});
3333

3434
module.exports.buildPublicHtml = buildPublicHtml;
3535

Build/build-reject-domainset.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const { domainDeduper } = require('./lib/domain-deduper');
1212
const createKeywordFilter = require('./lib/aho-corasick');
1313
const { readFileByLine } = require('./lib/fetch-remote-text-by-line');
1414
const { createDomainSorter } = require('./lib/stable-sort-domain');
15-
const { traceSync, runner } = require('./lib/trace-runner');
15+
const { traceSync, runner, task } = require('./lib/trace-runner');
1616
const { getGorhillPublicSuffixPromise } = require('./lib/get-gorhill-publicsuffix');
1717
const { createCachedGorhillGetDomain } = require('./lib/cached-tld-parse');
1818

@@ -23,7 +23,7 @@ const domainKeywordsSet = new Set();
2323
/** @type {Set<string>} Dedupe domains included by DOMAIN-SUFFIX */
2424
const domainSuffixSet = new Set();
2525

26-
const buildRejectDomainSet = async () => {
26+
const buildRejectDomainSet = task(__dirname, async () => {
2727
/** @type Set<string> */
2828
const domainSets = new Set();
2929

@@ -228,7 +228,7 @@ const buildRejectDomainSet = async () => {
228228
// Copy reject_sukka.conf for backward compatibility
229229
fse.copy(pathResolve(__dirname, '../Source/domainset/reject_sukka.conf'), pathResolve(__dirname, '../List/domainset/reject_sukka.conf'))
230230
]);
231-
};
231+
});
232232

233233
module.exports.buildRejectDomainSet = buildRejectDomainSet;
234234

Build/build-speedtest-domainset.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const { createRuleset } = require('./lib/create-file');
55
const domainSorter = require('./lib/stable-sort-domain');
66

77
const { Sema } = require('async-sema');
8-
const { runner } = require('./lib/trace-runner');
8+
const { runner, task } = require('./lib/trace-runner');
99
const s = new Sema(2);
1010

1111
/**
@@ -46,7 +46,7 @@ const querySpeedtestApi = async (keyword) => {
4646
}
4747
};
4848

49-
const buildSpeedtestDomainSet = async () => {
49+
const buildSpeedtestDomainSet = task(__filename, async () => {
5050
/** @type {Set<string>} */
5151
const domains = new Set([
5252
'.speedtest.net',
@@ -123,7 +123,7 @@ const buildSpeedtestDomainSet = async () => {
123123
path.resolve(__dirname, '../List/domainset/speedtest.conf'),
124124
path.resolve(__dirname, '../Clash/domainset/speedtest.txt')
125125
));
126-
};
126+
});
127127

128128
module.exports.buildSpeedtestDomainSet = buildSpeedtestDomainSet;
129129

Build/build-telegram-cidr.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ const path = require('path');
44
const { isIPv4, isIPv6 } = require('net');
55
const { processLine } = require('./lib/process-line');
66
const { createRuleset } = require('./lib/create-file');
7-
const { runner } = require('./lib/trace-runner');
7+
const { runner, task } = require('./lib/trace-runner');
88

9-
const buildTelegramCIDR = async () => {
9+
const buildTelegramCIDR = task(__filename, async () => {
1010
/** @type {Response} */
1111
const resp = await fetchWithRetry('https://core.telegram.org/resources/cidr.txt');
1212
const lastModified = resp.headers.get('last-modified');
@@ -49,7 +49,7 @@ const buildTelegramCIDR = async () => {
4949
path.resolve(__dirname, '../List/ip/telegram.conf'),
5050
path.resolve(__dirname, '../Clash/ip/telegram.txt')
5151
));
52-
};
52+
});
5353

5454
module.exports.buildTelegramCIDR = buildTelegramCIDR;
5555

Build/build.js

Whitespace-only changes.

0 commit comments

Comments
 (0)