build-apple-cdn.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // @ts-check
  2. import { createRuleset } from './lib/create-file';
  3. import { parseFelixDnsmasq } from './lib/parse-dnsmasq';
  4. import { task } from './trace';
  5. import { SHARED_DESCRIPTION } from './lib/constants';
  6. import { createMemoizedPromise } from './lib/memo-promise';
  7. import { TTL, deserializeArray, fsFetchCache, serializeArray, createCacheKey } from './lib/cache-filesystem';
  8. import { output } from './lib/misc';
  9. const cacheKey = createCacheKey(__filename);
  10. const url = 'https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/apple.china.conf';
  11. export const getAppleCdnDomainsPromise = createMemoizedPromise(() => fsFetchCache.apply(
  12. cacheKey(url),
  13. () => parseFelixDnsmasq(url),
  14. {
  15. ttl: TTL.THREE_DAYS(),
  16. serializer: serializeArray,
  17. deserializer: deserializeArray
  18. }
  19. ));
  20. export const buildAppleCdn = task(require.main === module, __filename)(async (span) => {
  21. const res: string[] = await span.traceChildPromise('get apple cdn domains', getAppleCdnDomainsPromise());
  22. const description = [
  23. ...SHARED_DESCRIPTION,
  24. '',
  25. 'This file contains Apple\'s domains using their China mainland CDN servers.',
  26. '',
  27. 'Data from:',
  28. ' - https://github.com/felixonmars/dnsmasq-china-list'
  29. ];
  30. const domainset = res.map(i => `.${i}`);
  31. return createRuleset(
  32. span,
  33. 'Sukka\'s Ruleset - Apple CDN',
  34. description,
  35. new Date(),
  36. domainset,
  37. 'domainset',
  38. output('apple_cdn', 'domainset')
  39. );
  40. });