build-stream-service.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. return span.traceChildAsync(fileId, async (childSpan) => Promise.all([
  10. // Domains
  11. createRuleset(
  12. childSpan,
  13. `Sukka's Ruleset - Stream Services: ${title}`,
  14. [
  15. ...SHARED_DESCRIPTION,
  16. '',
  17. ...streamServices.map((i) => `- ${i.name}`)
  18. ],
  19. new Date(),
  20. streamServices.flatMap((i) => i.rules),
  21. 'ruleset',
  22. path.resolve(__dirname, `../List/non_ip/${fileId}.conf`),
  23. path.resolve(__dirname, `../Clash/non_ip/${fileId}.txt`)
  24. ),
  25. // IP
  26. createRuleset(
  27. childSpan,
  28. `Sukka's Ruleset - Stream Services' IPs: ${title}`,
  29. [
  30. ...SHARED_DESCRIPTION,
  31. '',
  32. ...streamServices.map((i) => `- ${i.name}`)
  33. ],
  34. new Date(),
  35. streamServices.flatMap((i) => (
  36. i.ip
  37. ? [
  38. ...i.ip.v4.map((ip) => `IP-CIDR,${ip},no-resolve`),
  39. ...i.ip.v6.map((ip) => `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(require.main === module, __filename)(async (span) => {
  50. return Promise.all([
  51. createRulesetForStreamService(span, 'stream', 'All', ALL),
  52. createRulesetForStreamService(span, 'stream_us', 'North America', NORTH_AMERICA),
  53. createRulesetForStreamService(span, 'stream_eu', 'Europe', EU),
  54. createRulesetForStreamService(span, 'stream_hk', 'Hong Kong', HK),
  55. createRulesetForStreamService(span, 'stream_tw', 'Taiwan', TW),
  56. createRulesetForStreamService(span, 'stream_jp', 'Japan', JP),
  57. // createRulesetForStreamService('stream_au', 'Oceania', AU),
  58. createRulesetForStreamService(span, 'stream_kr', 'Korean', KR)
  59. // createRulesetForStreamService('stream_south_east_asia', 'South East Asia', SOUTH_EAST_ASIA)
  60. ]);
  61. });