build-internal-rules.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // @ts-check
  2. const fs = require('fs');
  3. const fse = require('fs-extra');
  4. const path = require('path');
  5. const readline = require('readline');
  6. const { isDomainLoose } = require('./lib/is-domain-loose');
  7. const tldts = require('tldts');
  8. (async () => {
  9. const set = new Set();
  10. /**
  11. * @param {string} input
  12. */
  13. const addApexDomain = (input) => {
  14. const d = tldts.getDomain(input, { allowPrivateDomains: true });
  15. if (d) {
  16. set.add(d);
  17. }
  18. };
  19. for await (
  20. const line of readline.createInterface({
  21. input: fs.createReadStream(path.resolve(__dirname, '../List/non_ip/cdn.conf')),
  22. crlfDelay: Infinity
  23. })
  24. ) {
  25. if (line.startsWith('DOMAIN-SUFFIX,')) {
  26. addApexDomain(line.replace('DOMAIN-SUFFIX,', ''))
  27. } else if (line.startsWith('DOMAIN,')) {
  28. addApexDomain(line.replace('DOMAIN,', ''));
  29. }
  30. }
  31. for await (
  32. const line of readline.createInterface({
  33. input: fs.createReadStream(path.resolve(__dirname, '../List/domainset/cdn.conf')),
  34. crlfDelay: Infinity
  35. })
  36. ) {
  37. if (line[0] === '.') {
  38. addApexDomain(line.slice(1));
  39. } else if (isDomainLoose(line)) {
  40. addApexDomain(line);
  41. }
  42. }
  43. for await (
  44. const line of readline.createInterface({
  45. input: fs.createReadStream(path.resolve(__dirname, '../List/domainset/download.conf')),
  46. crlfDelay: Infinity
  47. })
  48. ) {
  49. if (line[0] === '.') {
  50. addApexDomain(line.slice(1));
  51. } else if (isDomainLoose(line)) {
  52. addApexDomain(line);
  53. }
  54. }
  55. await fse.ensureDir(path.resolve(__dirname, '../List/internal'));
  56. await fs.promises.writeFile(
  57. path.resolve(__dirname, '../List/internal/cdn.csv'),
  58. Array.from(set).map(i => `SUFFIX,${i}`).join('\n') + '\n'
  59. );
  60. })();