build-internal-reverse-chn-cidr.ts 942 B

12345678910111213141516171819202122232425262728293031
  1. import path from 'path';
  2. import { task } from './trace';
  3. import { exclude, merge } from 'fast-cidr-tools';
  4. import { getChnCidrPromise } from './build-chn-cidr';
  5. import { NON_CN_CIDR_INCLUDED_IN_CHNROUTE, RESERVED_IPV4_CIDR } from './constants/cidr';
  6. export const buildInternalReverseChnCIDR = task(import.meta.path, async () => {
  7. const cidrPromise = getChnCidrPromise();
  8. const peeked = Bun.peek(cidrPromise);
  9. const cidr: string[] = peeked === cidrPromise
  10. ? await cidrPromise
  11. : (peeked as string[]);
  12. const reversedCidr = merge(
  13. exclude(
  14. ['0.0.0.0/0'],
  15. RESERVED_IPV4_CIDR.concat(cidr),
  16. true
  17. ).concat(
  18. // https://github.com/misakaio/chnroutes2/issues/25
  19. NON_CN_CIDR_INCLUDED_IN_CHNROUTE
  20. )
  21. );
  22. return Bun.write(path.resolve(import.meta.dir, '../List/internal/reversed-chn-cidr.txt'), `${reversedCidr.join('\n')}\n`);
  23. });
  24. if (import.meta.main) {
  25. buildInternalReverseChnCIDR();
  26. }