瀏覽代碼

Chore: split code

SukkaW 4 年之前
父節點
當前提交
7ba16b0a55
共有 2 個文件被更改,包括 152 次插入150 次删除
  1. 2 150
      Build/build-reject-domainset.js
  2. 150 0
      Build/lib/parse-filter.js

+ 2 - 150
Build/build-reject-domainset.js

@@ -1,156 +1,8 @@
-const { default: got } = require('got-cjs');
 const { promises: fsPromises } = require('fs');
 const { resolve: pathResolve } = require('path');
-const { cpus } = require('os');
-const { isIP } = require('net');
-
-const threads = Math.max(cpus().length, 12);
-
-const rDomain = /^(((?!\-))(xn\-\-)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn\-\-)?([a-z0-9\-]{1,61}|[a-z0-9\-]{1,30})\.[a-z]{2,}$/m
-
 const Piscina = require('piscina');
-
-/**
- * @param {string | URL} domainListsUrl
- */
-async function processDomainLists(domainListsUrl) {
-  if (typeof domainListsUrl === 'string') {
-    domainListsUrl = new URL(domainListsUrl);
-  }
-
-  /** @type Set<string> */
-  const domainSets = new Set();
-  /** @type string[] */
-  const domains = (await got(domainListsUrl).text()).split('\n');
-  domains.forEach(line => {
-    if (
-      line.startsWith('#')
-      || line.startsWith('!')
-      || line.startsWith(' ')
-      || line === ''
-      || line.startsWith('\r')
-      || line.startsWith('\n')
-    ) {
-      return;
-    }
-    domainSets.add(line.trim());
-  });
-
-  return [...domainSets];
-}
-
-/**
- * @param {string | URL} hostsUrl
- */
-async function processHosts(hostsUrl, includeAllSubDomain = false) {
-  if (typeof hostsUrl === 'string') {
-    hostsUrl = new URL(hostsUrl);
-  }
-
-  /** @type Set<string> */
-  const domainSets = new Set();
-
-  /** @type string[] */
-  const hosts = (await got(hostsUrl).text()).split('\n');
-  hosts.forEach(line => {
-    if (line.includes('#')) {
-      return;
-    }
-    if (line.startsWith(' ') || line.startsWith('\r') || line.startsWith('\n') || line.trim() === '') {
-      return;
-    }
-    const [, ...domains] = line.split(' ');
-    const domain = domains.join(' ').trim();
-    if (rDomain.test(domain)) {
-      if (includeAllSubDomain) {
-        domainSets.add(`.${domain}`);
-      } else {
-        domainSets.add(domain);
-      }
-    }
-  });
-
-  return [...domainSets];
-}
-
-/**
- * @param {string | URL} filterRulesUrl
- * @returns {Promise<{ white: Set<string>, black: Set<string> }>}
- */
-async function processFilterRules(filterRulesUrl) {
-  if (typeof filterRulesUrl === 'string') {
-    filterRulesUrl = new URL(filterRulesUrl);
-  }
-
-  /** @type Set<string> */
-  const whitelistDomainSets = new Set();
-  /** @type Set<string> */
-  const blacklistDomainSets = new Set();
-
-  /** @type string[] */
-  const filterRules = (await got(filterRulesUrl).text()).split('\n').map(line => line.trim());
-
-  filterRules.forEach(line => {
-    if (
-      line === ''
-      || line.includes('#')
-      || line.includes('!')
-      || line.includes('*')
-      || line.includes('/')
-      || line.includes('$') && !line.startsWith('@@')
-      || line.trim() === ''
-      || isIP(line) !== 0
-    ) {
-      return;
-    }
-
-    if (line.startsWith('@@||')
-      && (
-        line.endsWith('^')
-        || line.endsWith('^|')
-        || line.endsWith('^$badfilter')
-        || line.endsWith('^$1p')
-      )
-    ) {
-      const domain = line
-        .replaceAll('@@||', '')
-        .replaceAll('^$badfilter', '')
-        .replaceAll('^$1p', '')
-        .replaceAll('^|', '')
-        .replaceAll('^', '')
-        .trim();
-      if (rDomain.test(domain)) {
-        whitelistDomainSets.add(domain);
-      }
-    } else if (
-      line.startsWith('||')
-      && (
-        line.endsWith('^')
-        || line.endsWith('^|')
-      )
-    ) {
-      const domain = `${line.replaceAll('||', '').replaceAll('^|', '').replaceAll('^', '')}`.trim();
-      if (rDomain.test(domain)) {
-        blacklistDomainSets.add(`.${domain}`);
-      }
-    } else if (line.startsWith('://')
-      && (
-        line.endsWith('^')
-        || line.endsWith('^|')
-      )
-    ) {
-      const domain = `${line.replaceAll('://', '').replaceAll('^|', '').replaceAll('^', '')}`.trim();
-      if (rDomain.test(domain)) {
-        blacklistDomainSets.add(domain);
-      }
-    }
-  });
-
-  return {
-    white: whitelistDomainSets,
-    black: blacklistDomainSets
-  };
-}
+const { processHosts, processFilterRules } = require('./lib/parse-filter');
+const threads = Math.max(require('os').cpus().length, 12);
 
 (async () => {
   /** @type Set<string> */

+ 150 - 0
Build/lib/parse-filter.js

@@ -0,0 +1,150 @@
+const { isIP } = require('net');
+const { default: got } = require('got-cjs');
+
+const rDomain = /^(((?!\-))(xn\-\-)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn\-\-)?([a-z0-9\-]{1,61}|[a-z0-9\-]{1,30})\.[a-z]{2,}$/m
+
+/**
+ * @param {string | URL} domainListsUrl
+ */
+async function processDomainLists(domainListsUrl) {
+  if (typeof domainListsUrl === 'string') {
+    domainListsUrl = new URL(domainListsUrl);
+  }
+
+  /** @type Set<string> */
+  const domainSets = new Set();
+  /** @type string[] */
+  const domains = (await got(domainListsUrl).text()).split('\n');
+  domains.forEach(line => {
+    if (
+      line.startsWith('#')
+      || line.startsWith('!')
+      || line.startsWith(' ')
+      || line === ''
+      || line.startsWith('\r')
+      || line.startsWith('\n')
+    ) {
+      return;
+    }
+    domainSets.add(line.trim());
+  });
+
+  return [...domainSets];
+}
+
+/**
+ * @param {string | URL} hostsUrl
+ */
+async function processHosts(hostsUrl, includeAllSubDomain = false) {
+  if (typeof hostsUrl === 'string') {
+    hostsUrl = new URL(hostsUrl);
+  }
+
+  /** @type Set<string> */
+  const domainSets = new Set();
+
+  /** @type string[] */
+  const hosts = (await got(hostsUrl).text()).split('\n');
+  hosts.forEach(line => {
+    if (line.includes('#')) {
+      return;
+    }
+    if (line.startsWith(' ') || line.startsWith('\r') || line.startsWith('\n') || line.trim() === '') {
+      return;
+    }
+    const [, ...domains] = line.split(' ');
+    const domain = domains.join(' ').trim();
+    if (rDomain.test(domain)) {
+      if (includeAllSubDomain) {
+        domainSets.add(`.${domain}`);
+      } else {
+        domainSets.add(domain);
+      }
+    }
+  });
+
+  return [...domainSets];
+}
+
+/**
+ * @param {string | URL} filterRulesUrl
+ * @returns {Promise<{ white: Set<string>, black: Set<string> }>}
+ */
+async function processFilterRules(filterRulesUrl) {
+  if (typeof filterRulesUrl === 'string') {
+    filterRulesUrl = new URL(filterRulesUrl);
+  }
+
+  /** @type Set<string> */
+  const whitelistDomainSets = new Set();
+  /** @type Set<string> */
+  const blacklistDomainSets = new Set();
+
+  /** @type string[] */
+  const filterRules = (await got(filterRulesUrl).text()).split('\n').map(line => line.trim());
+
+  filterRules.forEach(line => {
+    if (
+      line === ''
+      || line.includes('#')
+      || line.includes('!')
+      || line.includes('*')
+      || line.includes('/')
+      || line.includes('$') && !line.startsWith('@@')
+      || line.trim() === ''
+      || isIP(line) !== 0
+    ) {
+      return;
+    }
+
+    if (line.startsWith('@@||')
+      && (
+        line.endsWith('^')
+        || line.endsWith('^|')
+        || line.endsWith('^$badfilter')
+        || line.endsWith('^$1p')
+      )
+    ) {
+      const domain = line
+        .replaceAll('@@||', '')
+        .replaceAll('^$badfilter', '')
+        .replaceAll('^$1p', '')
+        .replaceAll('^|', '')
+        .replaceAll('^', '')
+        .trim();
+      if (rDomain.test(domain)) {
+        whitelistDomainSets.add(domain);
+      }
+    } else if (
+      line.startsWith('||')
+      && (
+        line.endsWith('^')
+        || line.endsWith('^|')
+      )
+    ) {
+      const domain = `${line.replaceAll('||', '').replaceAll('^|', '').replaceAll('^', '')}`.trim();
+      if (rDomain.test(domain)) {
+        blacklistDomainSets.add(`.${domain}`);
+      }
+    } else if (line.startsWith('://')
+      && (
+        line.endsWith('^')
+        || line.endsWith('^|')
+      )
+    ) {
+      const domain = `${line.replaceAll('://', '').replaceAll('^|', '').replaceAll('^', '')}`.trim();
+      if (rDomain.test(domain)) {
+        blacklistDomainSets.add(domain);
+      }
+    }
+  });
+
+  return {
+    white: whitelistDomainSets,
+    black: blacklistDomainSets
+  };
+}
+
+module.exports.processDomainLists = processDomainLists;
+module.exports.processHosts = processHosts;
+module.exports.processFilterRules = processFilterRules;