build-stream-service.ts 2.4 KB

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