build-stream-service.ts 2.4 KB

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