build-global-server-dns-mapping.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { appendArrayInPlace } from 'foxts/append-array-in-place';
  2. import { GLOBAL } from '../Source/non_ip/global';
  3. import { createGetDnsMappingRule } from './build-domestic-direct-lan-ruleset-dns-mapping-module';
  4. import { SOURCE_DIR } from './constants/dir';
  5. import { task } from './trace';
  6. import { once } from 'foxts/once';
  7. import path from 'node:path';
  8. import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
  9. import { SHARED_DESCRIPTION } from './constants/description';
  10. import { RulesetOutput } from './lib/rules/ruleset';
  11. export const getGlobalRulesetPromise = once(async () => {
  12. const globals = await readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/global.conf'));
  13. const getDnsMappingRuleWithWildcard = createGetDnsMappingRule(true);
  14. [GLOBAL].forEach((item) => {
  15. Object.values(item).forEach(({ domains }) => {
  16. appendArrayInPlace(globals, domains.flatMap(getDnsMappingRuleWithWildcard));
  17. });
  18. });
  19. return [globals] as const;
  20. });
  21. export const buildGlobalRuleset = task(require.main === module, __filename)(async (span) => {
  22. const [globals] = await getGlobalRulesetPromise();
  23. return new RulesetOutput(span, 'global', 'non_ip')
  24. .withTitle('Sukka\'s Ruleset - General Global Services')
  25. .appendDescription(
  26. SHARED_DESCRIPTION,
  27. '',
  28. 'This file contains rules for services that are NOT available inside the Mainland China.'
  29. )
  30. .addFromRuleset(globals)
  31. .write();
  32. });