mirror of
https://github.com/jakejarvis/rdapper.git
synced 2025-10-18 14:24:29 -04:00
Update getDomainParts
to allow passing options to tldts.parse()
.
This commit is contained in:
131
package-lock.json
generated
131
package-lock.json
generated
@@ -11,10 +11,13 @@
|
||||
"dependencies": {
|
||||
"tldts": "7.0.17"
|
||||
},
|
||||
"bin": {
|
||||
"rdapper": "bin/cli.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "2.2.5",
|
||||
"@types/node": "24.7.2",
|
||||
"tsdown": "0.15.6",
|
||||
"@biomejs/biome": "2.2.6",
|
||||
"@types/node": "24.8.1",
|
||||
"tsdown": "0.15.7",
|
||||
"typescript": "5.9.3",
|
||||
"vitest": "^3.2.4"
|
||||
},
|
||||
@@ -90,9 +93,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/biome": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.5.tgz",
|
||||
"integrity": "sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.6.tgz",
|
||||
"integrity": "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw==",
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"bin": {
|
||||
@@ -106,20 +109,20 @@
|
||||
"url": "https://opencollective.com/biome"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@biomejs/cli-darwin-arm64": "2.2.5",
|
||||
"@biomejs/cli-darwin-x64": "2.2.5",
|
||||
"@biomejs/cli-linux-arm64": "2.2.5",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.2.5",
|
||||
"@biomejs/cli-linux-x64": "2.2.5",
|
||||
"@biomejs/cli-linux-x64-musl": "2.2.5",
|
||||
"@biomejs/cli-win32-arm64": "2.2.5",
|
||||
"@biomejs/cli-win32-x64": "2.2.5"
|
||||
"@biomejs/cli-darwin-arm64": "2.2.6",
|
||||
"@biomejs/cli-darwin-x64": "2.2.6",
|
||||
"@biomejs/cli-linux-arm64": "2.2.6",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.2.6",
|
||||
"@biomejs/cli-linux-x64": "2.2.6",
|
||||
"@biomejs/cli-linux-x64-musl": "2.2.6",
|
||||
"@biomejs/cli-win32-arm64": "2.2.6",
|
||||
"@biomejs/cli-win32-x64": "2.2.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-darwin-arm64": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.5.tgz",
|
||||
"integrity": "sha512-MYT+nZ38wEIWVcL5xLyOhYQQ7nlWD0b/4mgATW2c8dvq7R4OQjt/XGXFkXrmtWmQofaIM14L7V8qIz/M+bx5QQ==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.6.tgz",
|
||||
"integrity": "sha512-UZPmn3M45CjTYulgcrFJFZv7YmK3pTxTJDrFYlNElT2FNnkkX4fsxjExTSMeWKQYoZjvekpH5cvrYZZlWu3yfA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -134,9 +137,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-darwin-x64": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.5.tgz",
|
||||
"integrity": "sha512-FLIEl73fv0R7dI10EnEiZLw+IMz3mWLnF95ASDI0kbx6DDLJjWxE5JxxBfmG+udz1hIDd3fr5wsuP7nwuTRdAg==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.6.tgz",
|
||||
"integrity": "sha512-HOUIquhHVgh/jvxyClpwlpl/oeMqntlteL89YqjuFDiZ091P0vhHccwz+8muu3nTyHWM5FQslt+4Jdcd67+xWQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -151,9 +154,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-arm64": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.5.tgz",
|
||||
"integrity": "sha512-5DjiiDfHqGgR2MS9D+AZ8kOfrzTGqLKywn8hoXpXXlJXIECGQ32t+gt/uiS2XyGBM2XQhR6ztUvbjZWeccFMoQ==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.6.tgz",
|
||||
"integrity": "sha512-BpGtuMJGN+o8pQjvYsUKZ+4JEErxdSmcRD/JG3mXoWc6zrcA7OkuyGFN1mDggO0Q1n7qXxo/PcupHk8gzijt5g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -168,9 +171,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.5.tgz",
|
||||
"integrity": "sha512-5Ov2wgAFwqDvQiESnu7b9ufD1faRa+40uwrohgBopeY84El2TnBDoMNXx6iuQdreoFGjwW8vH6k68G21EpNERw==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.6.tgz",
|
||||
"integrity": "sha512-TjCenQq3N6g1C+5UT3jE1bIiJb5MWQvulpUngTIpFsL4StVAUXucWD0SL9MCW89Tm6awWfeXBbZBAhJwjyFbRQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -185,9 +188,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-x64": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.5.tgz",
|
||||
"integrity": "sha512-fq9meKm1AEXeAWan3uCg6XSP5ObA6F/Ovm89TwaMiy1DNIwdgxPkNwxlXJX8iM6oRbFysYeGnT0OG8diCWb9ew==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.6.tgz",
|
||||
"integrity": "sha512-1HaM/dpI/1Z68zp8ZdT6EiBq+/O/z97a2AiHMl+VAdv5/ELckFt9EvRb8hDHpk8hUMoz03gXkC7VPXOVtU7faA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -202,9 +205,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-x64-musl": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.5.tgz",
|
||||
"integrity": "sha512-AVqLCDb/6K7aPNIcxHaTQj01sl1m989CJIQFQEaiQkGr2EQwyOpaATJ473h+nXDUuAcREhccfRpe/tu+0wu0eQ==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.6.tgz",
|
||||
"integrity": "sha512-1ZcBux8zVM3JhWN2ZCPaYf0+ogxXG316uaoXJdgoPZcdK/rmRcRY7PqHdAos2ExzvjIdvhQp72UcveI98hgOog==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -219,9 +222,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-win32-arm64": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.5.tgz",
|
||||
"integrity": "sha512-xaOIad4wBambwJa6mdp1FigYSIF9i7PCqRbvBqtIi9y29QtPVQ13sDGtUnsRoe6SjL10auMzQ6YAe+B3RpZXVg==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.6.tgz",
|
||||
"integrity": "sha512-h3A88G8PGM1ryTeZyLlSdfC/gz3e95EJw9BZmA6Po412DRqwqPBa2Y9U+4ZSGUAXCsnSQE00jLV8Pyrh0d+jQw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -236,9 +239,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-win32-x64": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.5.tgz",
|
||||
"integrity": "sha512-F/jhuXCssPFAuciMhHKk00xnCAxJRS/pUzVfXYmOMUp//XW7mO6QeCjsjvnm8L4AO/dG2VOB0O+fJPiJ2uXtIw==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.6.tgz",
|
||||
"integrity": "sha512-yx0CqeOhPjYQ5ZXgPfu8QYkgBhVJyvWe36as7jRuPrKPO5ylVDfwVtPQ+K/mooNTADW0IhxOZm3aPu16dP8yNQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -1392,9 +1395,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz",
|
||||
"integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==",
|
||||
"version": "24.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.1.tgz",
|
||||
"integrity": "sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1537,17 +1540,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ast-kit": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.1.2.tgz",
|
||||
"integrity": "sha512-cl76xfBQM6pztbrFWRnxbrDm9EOqDr1BF6+qQnnDZG2Co2LjyUktkN9GTJfBAfdae+DbT2nJf2nCGAdDDN7W2g==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.1.3.tgz",
|
||||
"integrity": "sha512-TH+b3Lv6pUjy/Nu0m6A2JULtdzLpmqF9x1Dhj00ZoEiML8qvVA9j1flkzTKNYgdEhWrjDwtWNpyyCUbfQe514g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.28.0",
|
||||
"@babel/parser": "^7.28.4",
|
||||
"pathe": "^2.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.18.0"
|
||||
"node": ">=20.19.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sxzz"
|
||||
@@ -1795,9 +1798,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/get-tsconfig": {
|
||||
"version": "4.10.1",
|
||||
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
|
||||
"integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
|
||||
"version": "4.12.0",
|
||||
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.12.0.tgz",
|
||||
"integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -2029,20 +2032,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rolldown-plugin-dts": {
|
||||
"version": "0.16.9",
|
||||
"resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.16.9.tgz",
|
||||
"integrity": "sha512-65fAQjQAAXW7j2V5/872r++jjjR2/Pur18/PQO/JgfJl3vKxapXO2KU1l5bUdRoFuuryF+23+Hfu0Cw3bhM97g==",
|
||||
"version": "0.16.12",
|
||||
"resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.16.12.tgz",
|
||||
"integrity": "sha512-9dGjm5oqtKcbZNhpzyBgb8KrYiU616A7IqcFWG7Msp1RKAXQ/hapjivRg+g5IYWSiFhnk3OKYV5T4Ft1t8Cczg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/generator": "^7.28.3",
|
||||
"@babel/parser": "^7.28.4",
|
||||
"@babel/types": "^7.28.4",
|
||||
"ast-kit": "^2.1.2",
|
||||
"ast-kit": "^2.1.3",
|
||||
"birpc": "^2.6.1",
|
||||
"debug": "^4.4.3",
|
||||
"dts-resolver": "^2.1.2",
|
||||
"get-tsconfig": "^4.10.1",
|
||||
"get-tsconfig": "^4.12.0",
|
||||
"magic-string": "^0.30.19"
|
||||
},
|
||||
"engines": {
|
||||
@@ -2056,7 +2059,7 @@
|
||||
"@typescript/native-preview": ">=7.0.0-dev.20250601.1",
|
||||
"rolldown": "^1.0.0-beta.9",
|
||||
"typescript": "^5.0.0",
|
||||
"vue-tsc": "~3.0.3"
|
||||
"vue-tsc": "~3.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@ts-macro/tsc": {
|
||||
@@ -2116,9 +2119,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
@@ -2262,13 +2265,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tsdown": {
|
||||
"version": "0.15.6",
|
||||
"resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.15.6.tgz",
|
||||
"integrity": "sha512-W6++O3JeV9gm3JY6P/vLiC7zzTcJbZhQxXb+p3AvRMpDOPBIg82yXULyZCcwjsihY/bFG+Qw37HkezZbP7fzUg==",
|
||||
"version": "0.15.7",
|
||||
"resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.15.7.tgz",
|
||||
"integrity": "sha512-uFaVgWAogjOMqjY+CQwrUt3C6wzy6ynt82CIoXymnbS17ipUZ8WDXUceJjkislUahF/BZc5+W44Ue3p2oWtqUg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansis": "^4.1.0",
|
||||
"ansis": "^4.2.0",
|
||||
"cac": "^6.7.14",
|
||||
"chokidar": "^4.0.3",
|
||||
"debug": "^4.4.3",
|
||||
@@ -2276,8 +2279,8 @@
|
||||
"empathic": "^2.0.0",
|
||||
"hookable": "^5.5.3",
|
||||
"rolldown": "latest",
|
||||
"rolldown-plugin-dts": "^0.16.8",
|
||||
"semver": "^7.7.2",
|
||||
"rolldown-plugin-dts": "^0.16.11",
|
||||
"semver": "^7.7.3",
|
||||
"tinyexec": "^1.0.1",
|
||||
"tinyglobby": "^0.2.15",
|
||||
"tree-kill": "^1.2.2",
|
||||
|
@@ -47,9 +47,9 @@
|
||||
"tldts": "7.0.17"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "2.2.5",
|
||||
"@types/node": "24.7.2",
|
||||
"tsdown": "0.15.6",
|
||||
"@biomejs/biome": "2.2.6",
|
||||
"@types/node": "24.8.1",
|
||||
"tsdown": "0.15.7",
|
||||
"typescript": "5.9.3",
|
||||
"vitest": "^3.2.4"
|
||||
},
|
||||
|
@@ -118,5 +118,10 @@ export async function isRegistered(
|
||||
return res.record.isRegistered === true;
|
||||
}
|
||||
|
||||
export { toRegistrableDomain } from "./lib/domain";
|
||||
export {
|
||||
getDomainParts,
|
||||
getDomainTld,
|
||||
isLikelyDomain,
|
||||
toRegistrableDomain,
|
||||
} from "./lib/domain";
|
||||
export type * from "./types";
|
||||
|
@@ -1,11 +1,28 @@
|
||||
import { parse } from "tldts";
|
||||
|
||||
type ParseOptions = Parameters<typeof parse>[1];
|
||||
|
||||
/**
|
||||
* Parse a domain into its parts.
|
||||
* Parse a domain into its parts. Accepts options which are passed to tldts.parse().
|
||||
* @see https://github.com/remusao/tldts/blob/master/packages/tldts-core/src/options.ts
|
||||
*/
|
||||
export function getDomainParts(domain: string) {
|
||||
const result = parse(domain);
|
||||
return result;
|
||||
export function getDomainParts(
|
||||
domain: string,
|
||||
opts?: ParseOptions,
|
||||
): ReturnType<typeof parse> {
|
||||
return parse(domain, { ...opts });
|
||||
}
|
||||
|
||||
/** Get the TLD (ICANN-only public suffix) of a domain. */
|
||||
export function getDomainTld(
|
||||
domain: string,
|
||||
opts?: ParseOptions,
|
||||
): string | null {
|
||||
const result = getDomainParts(domain, {
|
||||
allowPrivateDomains: false,
|
||||
...opts,
|
||||
});
|
||||
return result.publicSuffix ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -32,11 +49,17 @@ export function punyToUnicode(domain: string): string {
|
||||
* Normalize arbitrary input (domain or URL) to its registrable domain (eTLD+1).
|
||||
* Returns null when the input is not a valid ICANN domain (e.g., invalid TLD, IPs).
|
||||
*/
|
||||
export function toRegistrableDomain(input: string): string | null {
|
||||
export function toRegistrableDomain(
|
||||
input: string,
|
||||
opts?: ParseOptions,
|
||||
): string | null {
|
||||
const raw = (input ?? "").trim();
|
||||
if (raw === "") return null;
|
||||
|
||||
const result = parse(raw);
|
||||
const result = getDomainParts(raw, {
|
||||
allowPrivateDomains: false,
|
||||
...opts,
|
||||
});
|
||||
|
||||
// Reject IPs and non-ICANN/public suffixes.
|
||||
if (result.isIp) return null;
|
||||
|
Reference in New Issue
Block a user