build-chn-cidr.js 1.4 KB

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