index.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. const { downloadPreviousBuild, downloadPublicSuffixList } = require('./download-previous-build');
  2. const { buildCommon } = require('./build-common');
  3. const { buildAntiBogusDomain } = require('./build-anti-bogus-domain');
  4. const { buildAppleCdn } = require('./build-apple-cdn');
  5. const { buildCdnConf } = require('./build-cdn-conf');
  6. const { buildPhishingDomainSet } = require('./build-phishing-domainset');
  7. const { buildRejectDomainSet } = require('./build-reject-domainset');
  8. const { buildTelegramCIDR } = require('./build-telegram-cidr');
  9. const { buildChnCidr } = require('./build-chn-cidr');
  10. const { buildSpeedtestDomainSet } = require('./build-speedtest-domainset');
  11. const { buildInternalCDNDomains } = require('./build-internal-cdn-rules');
  12. const { buildInternalChnDomains } = require('./build-internal-chn-domains');
  13. const { buildDomesticRuleset } = require('./build-domestic-ruleset');
  14. const { validate } = require('./validate-domainset');
  15. const { buildPublicHtml } = require('./build-public');
  16. const { Worker } = require('jest-worker');
  17. /**
  18. * @template T
  19. * @typedef {import('jest-worker').Worker & { __sukka_worker_name: string } & T} WithWorker
  20. */
  21. /**
  22. * @template T
  23. * @param {string} path
  24. * @returns {WithWorker<T>}
  25. */
  26. const requireWorker = (path) => {
  27. const _worker = /** @type {WithWorker<T>} */ (new Worker(
  28. require.resolve(path),
  29. {
  30. numWorkers: 1,
  31. maxRetries: 0,
  32. enableWorkerThreads: true
  33. }
  34. ));
  35. _worker.getStderr().pipe(process.stderr);
  36. _worker.getStdout().pipe(process.stdout);
  37. _worker.__sukka_worker_name = path;
  38. return _worker;
  39. };
  40. /**
  41. * @template T
  42. * @param {WithWorker<T>} worker
  43. */
  44. const endWorker = async (worker) => {
  45. const { forceExited } = worker.end();
  46. if (forceExited && worker.__sukka_worker_name) {
  47. console.log(worker.__sukka_worker_name, 'forceExited');
  48. }
  49. };
  50. (async () => {
  51. const buildInternalReverseChnCIDRWorker = /** @type {WithWorker<import('./build-internal-reverse-chn-cidr')>} */ (requireWorker('./build-internal-reverse-chn-cidr'));
  52. const { buildInternalReverseChnCIDR } = buildInternalReverseChnCIDRWorker;
  53. // download-previous-build
  54. const downloadPreviousBuildPromise = downloadPreviousBuild();
  55. const downloadPublicSuffixListPromise = downloadPublicSuffixList();
  56. // build:common
  57. const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon());
  58. // build:anti-bogus-domain
  59. const buildAntiBogusDomainPromise = downloadPreviousBuildPromise.then(() => buildAntiBogusDomain());
  60. // build:apple-cdn
  61. const buildAppleCdnPromise = downloadPreviousBuildPromise.then(() => buildAppleCdn());
  62. // build:cdn-conf
  63. const buildCdnConfPromise = Promise.all([
  64. downloadPreviousBuildPromise,
  65. downloadPublicSuffixListPromise
  66. ]).then(() => buildCdnConf());
  67. // build:phishing-domainset
  68. const buildPhilishingDomainsetPromise = downloadPreviousBuildPromise.then(() => buildPhishingDomainSet());
  69. // build:reject-domainset
  70. const buildRejectDomainSetPromise = Promise.all([
  71. downloadPreviousBuildPromise,
  72. downloadPublicSuffixListPromise,
  73. buildPhilishingDomainsetPromise
  74. ]).then(() => buildRejectDomainSet());
  75. // build:telegram-cidr
  76. const buildTelegramCIDRPromise = downloadPreviousBuildPromise.then(() => buildTelegramCIDR());
  77. // build:chn-cidr
  78. const buildChnCidrPromise = downloadPreviousBuildPromise.then(() => buildChnCidr());
  79. // build:speedtest-domainset
  80. const buildSpeedtestDomainSetPromise = downloadPreviousBuildPromise.then(() => buildSpeedtestDomainSet());
  81. // build:internal-cdn-rules
  82. const buildInternalCDNDomainsPromise = Promise.all([
  83. buildCommonPromise,
  84. buildCdnConfPromise
  85. ]).then(() => buildInternalCDNDomains());
  86. // build:internal-reverse-chn-cidr
  87. const buildInternalReverseChnCIDRPromise = buildInternalReverseChnCIDR();
  88. // build:internal-chn-domains
  89. const buildInternalChnDomainsPromise = buildInternalChnDomains();
  90. // build:domestic-ruleset
  91. const buildDomesticRulesetPromise = downloadPreviousBuildPromise.then(() => buildDomesticRuleset());
  92. await Promise.all([
  93. downloadPreviousBuildPromise,
  94. downloadPublicSuffixListPromise,
  95. buildCommonPromise,
  96. buildAntiBogusDomainPromise,
  97. buildAppleCdnPromise,
  98. buildCdnConfPromise,
  99. buildPhilishingDomainsetPromise,
  100. buildRejectDomainSetPromise,
  101. buildTelegramCIDRPromise,
  102. buildChnCidrPromise,
  103. buildSpeedtestDomainSetPromise,
  104. buildInternalCDNDomainsPromise,
  105. buildInternalReverseChnCIDRPromise,
  106. buildInternalChnDomainsPromise,
  107. buildDomesticRulesetPromise
  108. ]);
  109. await Promise.all([
  110. buildPublicHtml(),
  111. validate(),
  112. endWorker(buildInternalReverseChnCIDRWorker)
  113. ]);
  114. })();