normalize-domain.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. // https://github.com/remusao/tldts/issues/2121
  2. // In short, single label domain suffix is ignored due to the size optimization, so no isIcann
  3. // import tldts from 'tldts-experimental';
  4. import tldts from 'tldts';
  5. import { normalizeTldtsOpt } from '../constants/loose-tldts-opt';
  6. type TldTsParsed = ReturnType<typeof tldts.parse>;
  7. /**
  8. * Skipped the input non-empty check, the `domain` should not be empty.
  9. */
  10. export function fastNormalizeDomain(domain: string, parsed: TldTsParsed = tldts.parse(domain, normalizeTldtsOpt)) {
  11. if (parsed.isIp) return null;
  12. // Private invalid domain (things like .tor, .dn42, etc)
  13. if (!parsed.isIcann && !parsed.isPrivate) return null;
  14. return parsed.hostname;
  15. }
  16. export function normalizeDomain(domain: string, parsed: TldTsParsed | null = null) {
  17. if (domain.length === 0) return null;
  18. parsed ??= tldts.parse(domain, normalizeTldtsOpt);
  19. if (parsed.isIp) return null;
  20. // Private invalid domain (things like .tor, .dn42, etc)
  21. if (!parsed.isIcann && !parsed.isPrivate) return null;
  22. // const h = parsed.hostname;
  23. // if (h === null) return null;
  24. return parsed.hostname;
  25. }