validate-global-tld.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import path from 'node:path';
  2. import { HostnameSmolTrie } from 'hntrie/smol';
  3. import { domainToASCII } from 'node:url';
  4. import { OUTPUT_SURGE_DIR } from './constants/dir';
  5. import { ICP_TLD } from './constants/domains';
  6. import tldts from 'tldts-experimental';
  7. import { looseTldtsOpt } from './constants/loose-tldts-opt';
  8. import runAgainstSourceFile from './lib/run-against-source-file';
  9. import { MARKER_DOMAIN } from './constants/description';
  10. (async () => {
  11. const trie = new HostnameSmolTrie();
  12. const extraWhiteTLDs = new Set<string>();
  13. await runAgainstSourceFile(path.join(OUTPUT_SURGE_DIR, 'non_ip', 'domestic.conf'), (domain) => {
  14. if (domain === MARKER_DOMAIN) {
  15. return;
  16. }
  17. const tld = tldts.getPublicSuffix(domain, looseTldtsOpt);
  18. if (tld) {
  19. extraWhiteTLDs.add(tld);
  20. }
  21. }, 'ruleset');
  22. await runAgainstSourceFile(path.join(OUTPUT_SURGE_DIR, 'non_ip', 'global.conf'), (domain, includeAllSubdomain) => {
  23. if (includeAllSubdomain) {
  24. trie.addSubdomain(domain);
  25. } else {
  26. trie.add(domain);
  27. }
  28. }, 'ruleset');
  29. ICP_TLD.forEach(tld => trie.whitelist('.' + tld));
  30. extraWhiteTLDs.forEach(tld => trie.whitelist('.' + tld));
  31. const dump: string[] = [];
  32. trie.dump((rawDomain, includeSubdomain) => {
  33. const domain = domainToASCII(rawDomain);
  34. if (domain) dump.push(includeSubdomain ? '.' + domain : domain);
  35. });
  36. console.log(dump.join('\n'));
  37. })();