build-domestic-ruleset.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // @ts-check
  2. const path = require('path');
  3. const { DOMESTICS } = require('../Source/non_ip/domestic');
  4. const { readFileByLine } = require('./lib/fetch-remote-text-by-line');
  5. const { processLine } = require('./lib/process-line');
  6. const { compareAndWriteFile, createRuleset } = require('./lib/create-file');
  7. const domainSorter = require('./lib/stable-sort-domain');
  8. const { runner } = require('./lib/trace-runner');
  9. runner(__filename, async () => {
  10. const rl = readFileByLine(path.resolve(__dirname, '../Source/non_ip/domestic.conf'));
  11. const results = [];
  12. for await (const l of rl) {
  13. const line = processLine(l);
  14. if (line) {
  15. results.push(line);
  16. }
  17. }
  18. results.push(
  19. ...Object.entries(DOMESTICS)
  20. .filter(([key]) => key !== 'SYSTEM')
  21. .flatMap(([, { domains }]) => domains)
  22. .sort(domainSorter)
  23. .map((domain) => `DOMAIN-SUFFIX,${domain}`)
  24. );
  25. const rulesetDescription = [
  26. 'License: AGPL 3.0',
  27. 'Homepage: https://ruleset.skk.moe',
  28. 'GitHub: https://github.com/SukkaW/Surge',
  29. '',
  30. 'This file contains known addresses that are avaliable in the Mainland China.'
  31. ];
  32. await Promise.all([
  33. ...createRuleset(
  34. 'Sukka\'s Ruleset - Domestic Domains',
  35. rulesetDescription,
  36. new Date(),
  37. results,
  38. 'ruleset',
  39. path.resolve(__dirname, '../List/non_ip/domestic.conf'),
  40. path.resolve(__dirname, '../Clash/non_ip/domestic.txt')
  41. ),
  42. compareAndWriteFile(
  43. [
  44. '#!name=[Sukka] Local DNS Mapping',
  45. `#!desc=Last Updated: ${new Date().toISOString()}`,
  46. '',
  47. '[Host]',
  48. ...Object.entries(DOMESTICS)
  49. .flatMap(
  50. ([, { domains, dns }]) => domains.flatMap((domain) => [
  51. `${domain} = server:${dns}`,
  52. `*.${domain} = server:${dns}`
  53. ])
  54. )
  55. ],
  56. path.resolve(__dirname, '../Modules/sukka_local_dns_mapping.sgmodule')
  57. )
  58. ]);
  59. });