build-stream-service.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // @ts-check
  2. const { task } = require('./lib/trace-runner');
  3. const path = require('path');
  4. const { createRuleset } = require('./lib/create-file');
  5. const {
  6. ALL, NORTH_AMERICA, EU, HK, TW, JP, KR
  7. // SOUTH_EAST_ASIA, AU
  8. } = require('../Source/stream');
  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. const buildStreamService = task(__filename, async () => {
  58. return Promise.all([
  59. ...createRulesetForStreamService('stream', 'All', ALL),
  60. ...createRulesetForStreamService('stream_us', 'North America', NORTH_AMERICA),
  61. ...createRulesetForStreamService('stream_eu', 'Europe', EU),
  62. ...createRulesetForStreamService('stream_hk', 'Hong Kong', HK),
  63. ...createRulesetForStreamService('stream_tw', 'Taiwan', TW),
  64. ...createRulesetForStreamService('stream_jp', 'Japan', JP),
  65. // ...createRulesetForStreamService('stream_au', 'Oceania', AU),
  66. ...createRulesetForStreamService('stream_kr', 'Korean', KR)
  67. // ...createRulesetForStreamService('stream_south_east_asia', 'South East Asia', SOUTH_EAST_ASIA)
  68. ]);
  69. });
  70. module.exports.buildStreamService = buildStreamService;
  71. if (require.main === module) {
  72. buildStreamService();
  73. }