Skip to content

Commit a6223a8

Browse files
committed
Refactor Stream Hosts
1 parent f96505c commit a6223a8

File tree

8 files changed

+1089
-561
lines changed

8 files changed

+1089
-561
lines changed

Build/build-stream-service.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// @ts-check
2+
const { task } = require('./lib/trace-runner');
3+
4+
const path = require('path');
5+
const { createRuleset } = require('./lib/create-file');
6+
7+
const { ALL, NORTH_AMERICA, EU, HK, TW, JP, AU, KR } = require('../Source/stream');
8+
9+
/**
10+
* @param {string} fileId
11+
* @param {string} title
12+
* @param {import('../Source/stream').StreamService[]} streamServices
13+
*/
14+
const createRulesetForStreamService = (fileId, title, streamServices) => {
15+
return [
16+
// Domains
17+
...createRuleset(
18+
`Sukka's Ruleset - Stream Services: ${title}`,
19+
[
20+
'License: AGPL 3.0',
21+
'Homepage: https://ruleset.skk.moe',
22+
'GitHub: https://github.com/SukkaW/Surge',
23+
'',
24+
...streamServices.map(i => `- ${i.name}`)
25+
],
26+
new Date(),
27+
streamServices.flatMap(i => i.rules),
28+
'ruleset',
29+
path.resolve(__dirname, `../List/non_ip/${fileId}.conf`),
30+
path.resolve(__dirname, `../Clash/non_ip/${fileId}.txt`)
31+
),
32+
// IP
33+
...createRuleset(
34+
`Sukka's Ruleset - Stream Services' IPs: ${title}`,
35+
[
36+
'License: AGPL 3.0',
37+
'Homepage: https://ruleset.skk.moe',
38+
'GitHub: https://github.com/SukkaW/Surge',
39+
'',
40+
...streamServices.map(i => `- ${i.name}`)
41+
],
42+
new Date(),
43+
streamServices.flatMap(i => (
44+
i.ip
45+
? [
46+
...i.ip.v4.map(ip => `IP-CIDR,${ip},no-resolve`),
47+
...i.ip.v6.map(ip => `IP-CIDR6,${ip},no-resolve`)
48+
]
49+
: []
50+
)),
51+
'ruleset',
52+
path.resolve(__dirname, `../List/ip/${fileId}.conf`),
53+
path.resolve(__dirname, `../Clash/ip/${fileId}.txt`)
54+
)
55+
];
56+
};
57+
58+
const buildStreamService = task(__filename, async () => {
59+
return Promise.all([
60+
...createRulesetForStreamService('stream', 'All', ALL),
61+
...createRulesetForStreamService('stream_us', 'North America', NORTH_AMERICA),
62+
...createRulesetForStreamService('stream_eu', 'Europe', EU),
63+
...createRulesetForStreamService('stream_hk', 'Hong Kong', HK),
64+
...createRulesetForStreamService('stream_tw', 'Taiwan', TW),
65+
...createRulesetForStreamService('stream_jp', 'Japan', JP),
66+
...createRulesetForStreamService('stream_au', 'Oceania', AU),
67+
...createRulesetForStreamService('stream_kr', 'Korean', KR)
68+
]);
69+
});
70+
71+
module.exports.buildStreamService = buildStreamService;
72+
73+
if (require.main === module) {
74+
buildStreamService();
75+
}

Build/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const { buildSpeedtestDomainSet } = require('./build-speedtest-domainset');
1313
const { buildInternalCDNDomains } = require('./build-internal-cdn-rules');
1414
const { buildInternalChnDomains } = require('./build-internal-chn-domains');
1515
const { buildDomesticRuleset } = require('./build-domestic-ruleset');
16+
const { buildStreamService } = require('./build-stream-service');
1617
const { buildRedirectModule } = require('./build-redirect-module');
1718
const { validate } = require('./validate-domainset');
1819

@@ -103,8 +104,9 @@ const endWorker = async (worker) => {
103104
const buildInternalChnDomainsPromise = buildInternalChnDomains();
104105
// build:domestic-ruleset
105106
const buildDomesticRulesetPromise = downloadPreviousBuildPromise.then(() => buildDomesticRuleset());
106-
// build:redirect-module
107+
107108
const buildRedirectModulePromise = downloadPreviousBuildPromise.then(() => buildRedirectModule());
109+
const buildStreamServicePromise = downloadPreviousBuildPromise.then(() => buildStreamService());
108110

109111
const stats = await Promise.all([
110112
downloadPreviousBuildPromise,
@@ -122,7 +124,8 @@ const endWorker = async (worker) => {
122124
buildInternalReverseChnCIDRPromise,
123125
buildInternalChnDomainsPromise,
124126
buildDomesticRulesetPromise,
125-
buildRedirectModulePromise
127+
buildRedirectModulePromise,
128+
buildStreamServicePromise
126129
]);
127130

128131
await Promise.all([

Build/lib/create-file.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,22 @@ async function compareAndWriteFile(linesA, filePath) {
1212
if (!fs.existsSync(filePath)) {
1313
console.log(`${filePath} does not exists, writing...`);
1414
isEqual = false;
15+
} else if (linesA.length === 0) {
16+
console.log(`Nothing to write to ${filePath}...`);
17+
isEqual = false;
1518
} else {
1619
let index = 0;
1720

1821
for await (const lineB of readFileByLine(filePath)) {
1922
const lineA = linesA[index];
2023
index++;
2124

25+
if (lineA === undefined) {
26+
// The file becomes smaller
27+
isEqual = false;
28+
break;
29+
}
30+
2231
if (lineA[0] === '#' && lineB[0] === '#') {
2332
continue;
2433
}

Source/domainset/cdn.conf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,6 +1039,7 @@ files.slack.com
10391039
cdn.sstatic.net
10401040
# PornHub
10411041
.phncdn.com
1042+
# phprcdn.com # PornHub Premium CDN
10421043
# Font.net
10431044
.fonts.com
10441045
.fonts.net
@@ -1674,6 +1675,11 @@ headway-widget.net
16741675
cdn2.downdetector.com
16751676
# DailyMotion
16761677
.dmcdn.net
1678+
# NowE
1679+
images.now-tv.com
1680+
.nowestatic.com
1681+
# Paramount+
1682+
.pplusstatic.com
16771683
# Others
16781684
.ziffstatic.com
16791685
.muscache.com

Source/domainset/download.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,5 @@ enterprise.proxmox.com
139139
# Linux Mirrors
140140
mirror.navercorp.com
141141
fedorapeople.org
142+
# WhatPulse
143+
releases.whatpulse.org

Source/ip/stream.conf

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)