build-cdn-conf.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const { fetchWithRetry } = require('./lib/fetch-retry');
  2. const fs = require('fs');
  3. const path = require('path');
  4. const { compareAndWriteFile } = require('./lib/string-array-compare');
  5. const { withBannerArray } = require('./lib/with-banner');
  6. const { minifyRules } = require('./lib/minify-rules');
  7. (async () => {
  8. console.time('Total Time - build-cdn-conf');
  9. const domains = (await (await fetchWithRetry('https://publicsuffix.org/list/public_suffix_list.dat')).text()).split('\n');
  10. const S3OSSDomains = domains.filter(line => {
  11. if (line) {
  12. return (
  13. line.startsWith('s3-')
  14. || line.startsWith('s3.')
  15. )
  16. && (
  17. line.endsWith('.amazonaws.com')
  18. || line.endsWith('.scw.cloud')
  19. )
  20. && !line.includes('cn-');
  21. }
  22. return false;
  23. });
  24. const filePath = path.resolve(__dirname, '../Source/non_ip/cdn.conf');
  25. const resultPath = path.resolve(__dirname, '../List/non_ip/cdn.conf');
  26. const content = (await fs.promises.readFile(filePath, 'utf-8'))
  27. .replace(
  28. '# --- [AWS S3 Replace Me] ---',
  29. S3OSSDomains.map(domain => `DOMAIN-SUFFIX,${domain}`).join('\n')
  30. );
  31. await compareAndWriteFile(
  32. withBannerArray(
  33. 'Sukka\'s Surge Rules - CDN Domains',
  34. [
  35. 'License: AGPL 3.0',
  36. 'Homepage: https://ruleset.skk.moe',
  37. 'GitHub: https://github.com/SukkaW/Surge',
  38. '',
  39. 'This file contains object storage and static assets CDN domains.'
  40. ],
  41. new Date(),
  42. minifyRules(content.split('\n'))
  43. ),
  44. resultPath
  45. );
  46. console.timeEnd('Total Time - build-cdn-conf');
  47. })();