build-domestic-ruleset.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 { withBannerArray } = require('./lib/with-banner');
  7. const { compareAndWriteFile } = require('./lib/string-array-compare');
  8. (async () => {
  9. const rl = readFileByLine(path.resolve(__dirname, '../Source/non_ip/domestic.conf'));
  10. const results = [];
  11. for await (const l of rl) {
  12. const line = processLine(l);
  13. if (line) {
  14. results.push(line);
  15. }
  16. }
  17. results.push(
  18. ...Object.entries(DOMESTICS)
  19. .filter(([key]) => key !== 'SYSTEM')
  20. .flatMap(([, { domains }]) => domains)
  21. .sort()
  22. .map((domain) => `DOMAIN-SUFFIX,${domain}`)
  23. );
  24. await Promise.all([
  25. compareAndWriteFile(
  26. withBannerArray(
  27. 'Sukka\'s Surge Rules - Domestic Domain',
  28. [
  29. 'License: AGPL 3.0',
  30. 'Homepage: https://ruleset.skk.moe',
  31. 'GitHub: https://github.com/SukkaW/Surge',
  32. '',
  33. 'This file contains known addresses that are avaliable in the Mainland China.'
  34. ],
  35. new Date(),
  36. results
  37. ),
  38. path.resolve(__dirname, '../List/non_ip/domestic.conf')
  39. ),
  40. compareAndWriteFile(
  41. [
  42. '#!name=[Sukka] Local DNS Mapping',
  43. `#!desc=Last Updated: ${new Date().toISOString()}`,
  44. '',
  45. '[Host]',
  46. ...Object.entries(DOMESTICS)
  47. .flatMap(
  48. ([, { domains, dns }]) => domains.map((domain) => `${domain} = server:${dns}`)
  49. ),
  50. ''
  51. ],
  52. path.resolve(__dirname, '../Modules/sukka_local_dns_mapping.sgmodule')
  53. )
  54. ]);
  55. })();