build-chn-cidr.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // @ts-check
  2. const { fetchRemoteTextAndCreateReadlineInterface } = require('./lib/fetch-remote-text-by-line');
  3. const { withBannerArray } = require('./lib/with-banner');
  4. const { resolve: pathResolve } = require('path');
  5. const { compareAndWriteFile } = require('./lib/string-array-compare');
  6. const { processLine } = require('./lib/process-line');
  7. (async () => {
  8. console.time('Total Time - build-chnroutes-cidr');
  9. const { merge: mergeCidrs } = await import('cidr-tools-wasm');
  10. /** @type {Set<string>} */
  11. const cidr = new Set();
  12. for await (const line of await fetchRemoteTextAndCreateReadlineInterface('https://raw.githubusercontent.com/misakaio/chnroutes2/master/chnroutes.txt')) {
  13. const l = processLine(line);
  14. if (l) {
  15. cidr.add(l);
  16. }
  17. }
  18. console.log('Before Merge:', cidr.size);
  19. const filteredCidr = mergeCidrs(Array.from(cidr)).sort();
  20. console.log('After Merge:', filteredCidr.length);
  21. await compareAndWriteFile(
  22. withBannerArray(
  23. 'Sukka\'s Surge Rules - Mainland China IPv4 CIDR',
  24. [
  25. 'License: CC BY-SA 2.0',
  26. 'Homepage: https://ruleset.skk.moe',
  27. 'GitHub: https://github.com/SukkaW/Surge',
  28. '',
  29. 'Data from https://misaka.io (misakaio @ GitHub)'
  30. ],
  31. new Date(),
  32. filteredCidr.map(i => `IP-CIDR,${i}`)
  33. ),
  34. pathResolve(__dirname, '../List/ip/china_ip.conf')
  35. );
  36. console.timeEnd('Total Time - build-chnroutes-cidr');
  37. })();