normalize-domain.ts 801 B

1234567891011121314151617181920212223242526
  1. // https://github.com/remusao/tldts/issues/2121
  2. // import tldts from 'tldts-experimental';
  3. import tldts from 'tldts';
  4. export const normalizeDomain = (domain: string) => {
  5. if (!domain) return null;
  6. const parsed = tldts.parse(domain, { allowPrivateDomains: true, allowIcannDomains: true, detectIp: true });
  7. if (parsed.isIp) return null;
  8. if (!parsed.hostname) return null;
  9. // Private invalid domain (things like .tor, .dn42, etc)
  10. if (!parsed.isIcann && !parsed.isPrivate) return null;
  11. let h = parsed.hostname;
  12. let sliceStart: number | undefined;
  13. let sliceEnd: number | undefined;
  14. if (h[0] === '.') sliceStart = 1;
  15. if (h.endsWith('.')) sliceEnd = -1;
  16. if (sliceStart !== undefined || sliceEnd !== undefined) {
  17. h = h.slice(sliceStart, sliceEnd);
  18. }
  19. return h || null;
  20. };