ソースを参照

Chore: new sorting for reject hosts

SukkaW 3 年 前
コミット
a00f05a989
1 ファイル変更20 行追加1 行削除
  1. 20 1
      Build/build-reject-domainset.js

+ 20 - 1
Build/build-reject-domainset.js

@@ -6,6 +6,7 @@ const { processHosts, processFilterRules, preprocessFullDomainSetBeforeUsedAsWor
 const cpuCount = require('os').cpus().length;
 const cpuCount = require('os').cpus().length;
 const { isCI } = require('ci-info');
 const { isCI } = require('ci-info');
 const threads = isCI ? cpuCount : cpuCount / 2;
 const threads = isCI ? cpuCount : cpuCount / 2;
+const { getDomain } = require('tldts');
 
 
 const { HOSTS, ADGUARD_FILTERS, PREDEFINED_WHITELIST, PREDEFINED_ENFORCED_BACKLIST } = require('./lib/reject-data-source');
 const { HOSTS, ADGUARD_FILTERS, PREDEFINED_WHITELIST, PREDEFINED_ENFORCED_BACKLIST } = require('./lib/reject-data-source');
 const { withBannerArray } = require('./lib/with-banner');
 const { withBannerArray } = require('./lib/with-banner');
@@ -249,6 +250,24 @@ const filterRuleWhitelistDomainSets = new Set(PREDEFINED_WHITELIST);
 
 
   console.time('* Write reject.conf');
   console.time('* Write reject.conf');
 
 
+  const getDomainOpt = { allowPrivateDomains: true };
+  const sortedDomainSets = [...domainSets]
+    .map((v) => {
+      return { v, domain: getDomain(v, getDomainOpt)?.toLowerCase() || v };
+    })
+    .sort((a, b) => {
+      if (a.domain > b.domain) {
+        return 1;
+      }
+      if (a.domain < b.domain) {
+        return -1;
+      }
+      return 0;
+    })
+    .map(({ v }) => {
+      return v;
+    });
+
   await compareAndWriteFile(
   await compareAndWriteFile(
     withBannerArray(
     withBannerArray(
       'Sukka\'s Surge Rules - Reject Base',
       'Sukka\'s Surge Rules - Reject Base',
@@ -264,7 +283,7 @@ const filterRuleWhitelistDomainSets = new Set(PREDEFINED_WHITELIST);
         ...ADGUARD_FILTERS.map(filter => ` - ${Array.isArray(filter) ? filter[0] : filter}`),
         ...ADGUARD_FILTERS.map(filter => ` - ${Array.isArray(filter) ? filter[0] : filter}`),
       ],
       ],
       new Date(),
       new Date(),
-      [...domainSets].sort()
+      sortedDomainSets
     ),
     ),
     pathResolve(__dirname, '../List/domainset/reject.conf')
     pathResolve(__dirname, '../List/domainset/reject.conf')
   );
   );