tools-migrate-domains.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import path from 'node:path';
  2. import { readFileByLine } from './lib/fetch-text-by-line';
  3. import { processFilterRulesWithPreload } from './lib/parse-filter/filters';
  4. import { processHosts } from './lib/parse-filter/hosts';
  5. import { processLine } from './lib/process-line';
  6. import { HostnameSmolTrie } from './lib/trie';
  7. import { dummySpan } from './trace';
  8. import { SOURCE_DIR } from './constants/dir';
  9. import { PREDEFINED_WHITELIST } from './constants/reject-data-source';
  10. (async () => {
  11. const trie = new HostnameSmolTrie();
  12. await writeHostsToTrie(trie, 'https://cdn.jsdelivr.net/gh/crazy-max/WindowsSpyBlocker@master/data/hosts/spy.txt', true);
  13. await runWhiteOnSource(path.join(SOURCE_DIR, 'domainset', 'reject.conf'), trie);
  14. for (let i = 0, len = PREDEFINED_WHITELIST.length; i < len; i++) {
  15. trie.whitelist(PREDEFINED_WHITELIST[i]);
  16. }
  17. console.log('---------------------------');
  18. console.log(trie.dump().join('\n'));
  19. console.log('---------------------------');
  20. })();
  21. async function runWhiteOnSource(sourceFile: string, trie: HostnameSmolTrie) {
  22. for await (const line of readFileByLine(sourceFile)) {
  23. const l = processLine(line);
  24. if (l) {
  25. trie.whitelist(l);
  26. }
  27. }
  28. }
  29. async function writeHostsToTrie(trie: HostnameSmolTrie, hostsUrl: string, includeAllSubDomain = false) {
  30. const hosts = await processHosts(dummySpan, hostsUrl, [], includeAllSubDomain);
  31. for (let i = 0, len = hosts.length; i < len; i++) {
  32. trie.add(hosts[i]);
  33. }
  34. }
  35. // eslint-disable-next-line unused-imports/no-unused-vars -- ready to use function
  36. async function writeFiltersToTrie(trie: HostnameSmolTrie, filterUrl: string, includeThirdParty = false) {
  37. const { whiteDomainSuffixes, whiteDomains, blackDomainSuffixes, blackDomains } = await processFilterRulesWithPreload(filterUrl, [], includeThirdParty)(dummySpan);
  38. for (let i = 0, len = blackDomainSuffixes.length; i < len; i++) {
  39. trie.add(blackDomainSuffixes[i], true);
  40. }
  41. for (let i = 0, len = blackDomains.length; i < len; i++) {
  42. trie.add(blackDomains[i], false);
  43. }
  44. for (let i = 0, len = whiteDomainSuffixes.length; i < len; i++) {
  45. trie.whitelist(whiteDomainSuffixes[i], true);
  46. }
  47. for (let i = 0, len = whiteDomains.length; i < len; i++) {
  48. trie.whitelist(whiteDomains[i], false);
  49. }
  50. }