build-chn-cidr.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. // eslint-disable-next-line node/no-unsupported-features/es-syntax -- fuck
  10. const { merge: mergeCidrs } = await import('cidr-tools-wasm');
  11. /** @type {Set<string>} */
  12. const cidr = new Set();
  13. for await (const line of await fetchRemoteTextAndCreateReadlineInterface('https://raw.githubusercontent.com/misakaio/chnroutes2/master/chnroutes.txt')) {
  14. const l = processLine(line);
  15. if (l) {
  16. cidr.add(l);
  17. }
  18. }
  19. console.log('Before Merge:', cidr.size);
  20. const filteredCidr = mergeCidrs(Array.from(cidr)).sort();
  21. console.log('After Merge:', filteredCidr.length);
  22. await compareAndWriteFile(
  23. withBannerArray(
  24. 'Sukka\'s Surge Rules - Mainland China IPv4 CIDR',
  25. [
  26. 'License: CC BY-SA 2.0',
  27. 'Homepage: https://ruleset.skk.moe',
  28. 'GitHub: https://github.com/SukkaW/Surge',
  29. '',
  30. 'Data from https://misaka.io (misakaio @ GitHub)'
  31. ],
  32. new Date(),
  33. filteredCidr.map(i => `IP-CIDR,${i}`)
  34. ),
  35. pathResolve(__dirname, '../List/ip/china_ip.conf')
  36. );
  37. console.timeEnd('Total Time - build-chnroutes-cidr');
  38. })();