build-internal-reverse-chn-cidr.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import path from 'node: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. import fs from 'node:fs';
  7. import { OUTPUT_INTERNAL_DIR } from './constants/dir';
  8. import { asyncWriteToStream } from './lib/async-write-to-stream';
  9. import { mkdirp } from './lib/misc';
  10. import { appendArrayInPlace } from './lib/append-array-in-place';
  11. export const buildInternalReverseChnCIDR = task(require.main === module, __filename)(async () => {
  12. const [cidr] = await getChnCidrPromise();
  13. const reversedCidr = merge(appendArrayInPlace(
  14. exclude(
  15. ['0.0.0.0/0'],
  16. RESERVED_IPV4_CIDR.concat(cidr),
  17. true
  18. ),
  19. // https://github.com/misakaio/chnroutes2/issues/25
  20. NON_CN_CIDR_INCLUDED_IN_CHNROUTE
  21. ));
  22. const outputFile = path.join(OUTPUT_INTERNAL_DIR, 'reversed-chn-cidr.txt');
  23. await mkdirp(OUTPUT_INTERNAL_DIR);
  24. const writeStream = fs.createWriteStream(outputFile);
  25. for (const line of reversedCidr) {
  26. const p = asyncWriteToStream(writeStream, line + '\n');
  27. if (p) {
  28. // eslint-disable-next-line no-await-in-loop -- stream high water mark
  29. await p;
  30. }
  31. }
  32. await asyncWriteToStream(writeStream, '\n');
  33. writeStream.end();
  34. });