UNPKG

extract-tld

Version:

Extract the TLD from a URL against the [public suffix list](https://publicsuffix.org/).

1 lines 1.44 kB
{"mappings":"AAAA;IACE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;ACAD,OAAA,MAAM,sBAAuB,MAAM,GAAG,GAAG,YAAY,YAAY;;;;CAuChE,CAAC","sources":["src/src/types.ts","src/src/index.ts","src/index.ts"],"sourcesContent":[null,null,"import { ParseOptions } from './types';\nimport tlds from '../tlds.json';\n\nconst parseUrl = (remoteUrl: string | URL, options?: ParseOptions) => {\n const combinedTlds = { ...tlds.icann, ...tlds.private };\n\n const hostname = new URL(remoteUrl).hostname;\n const parts = hostname.split('.');\n let stack = '';\n let tldLevel = -1;\n\n const roots = options?.allowPrivateTLD ? combinedTlds : tlds.icann;\n\n for (let i = parts.length - 1, part; i >= 0; i--) {\n part = parts[i];\n stack = stack ? part + '.' + stack : part;\n if (roots[stack]) {\n tldLevel = roots[stack];\n }\n }\n\n if (tldLevel == -1 && options?.allowUnknownTLD) {\n tldLevel = 1;\n }\n\n if (parts.length <= tldLevel || tldLevel == -1) {\n throw new Error(\n 'Invalid TLD ' +\n JSON.stringify({\n parts,\n tldLevel,\n stack,\n allowUnknownTLD: options?.allowUnknownTLD,\n }),\n );\n }\n\n return {\n tld: parts.slice(-tldLevel).join('.'),\n domain: parts.slice(-tldLevel - 1).join('.'),\n sub: parts.slice(0, -tldLevel - 1).join('.'),\n };\n};\n\nexport { parseUrl };\n"],"names":[],"version":3,"file":"index.d.ts.map"}