tldts-icann 7.3.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/cjs/index.js +21 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/es6/index.js +8 -0
- package/dist/es6/index.js.map +1 -1
- package/dist/es6/tsconfig.bundle.tsbuildinfo +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/index.ts +12 -0
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -50,6 +50,7 @@ Alternatively, you can try it _directly in your browser_ here: https://npm.runki
|
|
|
50
50
|
- `tldts.parse(url | hostname, options)`
|
|
51
51
|
- `tldts.getHostname(url | hostname, options)`
|
|
52
52
|
- `tldts.getDomain(url | hostname, options)`
|
|
53
|
+
- `tldts.getFullDomain(url | hostname, options)`
|
|
53
54
|
- `tldts.getPublicSuffix(url | hostname, options)`
|
|
54
55
|
- `tldts.getSubdomain(url, | hostname, options)`
|
|
55
56
|
- `tldts.getDomainWithoutSuffix(url | hostname, options)`
|
|
@@ -190,6 +191,27 @@ getDomain('fr.t.co'); // returns `t.co`
|
|
|
190
191
|
getDomain('https://user:password@example.co.uk:8080/some/path?and&query#hash'); // returns `example.co.uk`
|
|
191
192
|
```
|
|
192
193
|
|
|
194
|
+
### getFullDomain(url | hostname, options?)
|
|
195
|
+
|
|
196
|
+
Returns the full domain — the subdomain together with the registrable domain (as
|
|
197
|
+
returned by `getDomain(...)`), i.e. the whole hostname _including_ any subdomain —
|
|
198
|
+
or `null` when the input has no registrable domain (IP address, single label,
|
|
199
|
+
bare public suffix, …). The result is the normalized hostname (lower-cased,
|
|
200
|
+
trailing dot stripped); it is not a DNS-absolute name (no trailing root dot) and
|
|
201
|
+
no IDNA/punycode conversion is performed.
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
const { getFullDomain } = require('tldts-icann');
|
|
205
|
+
|
|
206
|
+
getFullDomain('google.com'); // returns `google.com`
|
|
207
|
+
getFullDomain('fr.google.com'); // returns `fr.google.com`
|
|
208
|
+
getFullDomain('foo.google.co.uk'); // returns `foo.google.co.uk`
|
|
209
|
+
getFullDomain('t.co'); // returns `t.co`
|
|
210
|
+
getFullDomain('fr.t.co'); // returns `fr.t.co`
|
|
211
|
+
getFullDomain('1.2.3.4'); // returns null (no registrable domain)
|
|
212
|
+
getFullDomain('localhost'); // returns null
|
|
213
|
+
```
|
|
214
|
+
|
|
193
215
|
### getDomainWithoutSuffix(url | hostname, options?)
|
|
194
216
|
|
|
195
217
|
Returns the domain (as returned by `getDomain(...)`) without the public suffix part.
|
package/dist/cjs/index.js
CHANGED
|
@@ -431,7 +431,10 @@ function extractHostname(url, urlIsValidHostname, validate = false) {
|
|
|
431
431
|
else if (code < 48 || code > 57) {
|
|
432
432
|
// < 64 and not a delimiter/dot/digit => only '-' (45) is a valid
|
|
433
433
|
// host char here; everything else (space, %, !, etc.) is invalid.
|
|
434
|
-
|
|
434
|
+
// A '-' must also not START a label (the byte right after a '.') —
|
|
435
|
+
// mirrors is-valid.ts; the first label is covered by the first-char
|
|
436
|
+
// rule above. (RFC 1034 §3.5 / RFC 1035 §2.3.1 LDH.)
|
|
437
|
+
if (code !== 45 || vLastCode === 46 /* label-leading '-' */) {
|
|
435
438
|
vValid = false;
|
|
436
439
|
}
|
|
437
440
|
}
|
|
@@ -711,8 +714,14 @@ function isValidHostname (hostname) {
|
|
|
711
714
|
}
|
|
712
715
|
lastDotIndex = i;
|
|
713
716
|
}
|
|
714
|
-
else if (
|
|
715
|
-
|
|
717
|
+
else if (
|
|
718
|
+
// A forbidden character in the label...
|
|
719
|
+
!( /*@__INLINE__*/(isValidAscii(code) || code === 45 || code === 95)) ||
|
|
720
|
+
// ...or a '-' starting a label (the byte right after a '.'). A label must
|
|
721
|
+
// not begin with a hyphen (RFC 1034 §3.5 / RFC 1035 §2.3.1 LDH, as amended
|
|
722
|
+
// by RFC 1123 §2.1; cf. UTS #46 CheckHyphens). The first label is covered by
|
|
723
|
+
// the leading-character guard above; mirrors the trailing-'-' rule below.
|
|
724
|
+
(code === 45 && lastCharCode === 46)) {
|
|
716
725
|
return false;
|
|
717
726
|
}
|
|
718
727
|
lastCharCode = code;
|
|
@@ -1125,6 +1134,14 @@ function getDomain(url, options) {
|
|
|
1125
1134
|
/*@__INLINE__*/ resetResult(RESULT);
|
|
1126
1135
|
return parseImpl(url, 3 /* FLAG.DOMAIN */, suffixLookup, options, RESULT).domain;
|
|
1127
1136
|
}
|
|
1137
|
+
function getFullDomain(url, options) {
|
|
1138
|
+
/*@__INLINE__*/ resetResult(RESULT);
|
|
1139
|
+
const result = parseImpl(url, 3 /* FLAG.DOMAIN */, suffixLookup, options, RESULT);
|
|
1140
|
+
// The hostname *is* the full domain (subdomain + domain) whenever a
|
|
1141
|
+
// registrable domain exists; gate on `domain` so non-registrable inputs
|
|
1142
|
+
// (IPs, suffix-less or invalid hostnames) return `null` like `getDomain`.
|
|
1143
|
+
return result.domain === null ? null : result.hostname;
|
|
1144
|
+
}
|
|
1128
1145
|
function getSubdomain(url, options) {
|
|
1129
1146
|
/*@__INLINE__*/ resetResult(RESULT);
|
|
1130
1147
|
return parseImpl(url, 4 /* FLAG.SUB_DOMAIN */, suffixLookup, options, RESULT)
|
|
@@ -1138,6 +1155,7 @@ function getDomainWithoutSuffix(url, options) {
|
|
|
1138
1155
|
|
|
1139
1156
|
exports.getDomain = getDomain;
|
|
1140
1157
|
exports.getDomainWithoutSuffix = getDomainWithoutSuffix;
|
|
1158
|
+
exports.getFullDomain = getFullDomain;
|
|
1141
1159
|
exports.getHostname = getHostname;
|
|
1142
1160
|
exports.getPublicSuffix = getPublicSuffix;
|
|
1143
1161
|
exports.getSubdomain = getSubdomain;
|