jsdomain-parser 1.0.6 → 1.0.7
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 +1 -0
- package/dist/jsdomain-parser.cjs.js +65 -21
- package/dist/jsdomain-parser.cjs.min.js +1 -1
- package/dist/jsdomain-parser.esm.js +65 -21
- package/dist/jsdomain-parser.esm.min.js +1 -1
- package/dist/jsdomain-parser.js +65 -21
- package/dist/jsdomain-parser.min.js +1 -1
- package/{test/test.html → example/example.html} +1 -1
- package/index.js +1 -42
- package/package.json +4 -2
- package/src/parse.js +65 -0
- package/src/parseTld.js +12 -2
- package/src/parseUrl.js +15 -0
- package/src/tlds.json +1 -0
- package/test/parse.test.js +152 -0
package/dist/jsdomain-parser.js
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
var DomainParser = (function (exports) {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
const parseUrl = (url) => {
|
|
5
|
+
if (!url) throw new Error("Invalid domain name");
|
|
6
|
+
|
|
7
|
+
const haveProtocol = /^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(url);
|
|
8
|
+
if (!haveProtocol) url = `http://${url}`;
|
|
9
|
+
const urlObject = new URL(url);
|
|
10
|
+
|
|
11
|
+
// check for hostname validity
|
|
12
|
+
if (urlObject.hostname.split(".").findIndex((it) => it.trim() == "") >= 0)
|
|
13
|
+
throw new Error("Invalid domain name");
|
|
14
|
+
|
|
15
|
+
return urlObject;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
var parseUrl_1 = parseUrl;
|
|
19
|
+
|
|
4
20
|
var icann = {
|
|
5
21
|
ac: 1,
|
|
6
22
|
"com.ac": 2,
|
|
@@ -9780,6 +9796,7 @@ var DomainParser = (function (exports) {
|
|
|
9780
9796
|
"meinforum.net": 2,
|
|
9781
9797
|
"affinitylottery.org.uk": 3,
|
|
9782
9798
|
"raffleentry.org.uk": 3,
|
|
9799
|
+
localhost: 1,
|
|
9783
9800
|
"weeklylottery.org.uk": 3
|
|
9784
9801
|
}
|
|
9785
9802
|
};
|
|
@@ -9796,7 +9813,7 @@ var DomainParser = (function (exports) {
|
|
|
9796
9813
|
|
|
9797
9814
|
var tlds = getCjsExportFromNamespace(tlds$2);
|
|
9798
9815
|
|
|
9799
|
-
const parseTld = (
|
|
9816
|
+
const parseTld = (url, options = {}) => {
|
|
9800
9817
|
const {
|
|
9801
9818
|
allowUnknown = false,
|
|
9802
9819
|
allowPrivate = true,
|
|
@@ -9807,6 +9824,12 @@ var DomainParser = (function (exports) {
|
|
|
9807
9824
|
throw new Error("customTlds must be an array");
|
|
9808
9825
|
}
|
|
9809
9826
|
|
|
9827
|
+
const { hostname } = parseUrl_1(url);
|
|
9828
|
+
|
|
9829
|
+
// handle localhost as a special case
|
|
9830
|
+
if (hostname == "localhost" && allowPrivate)
|
|
9831
|
+
return { name: "localhost", length: 1, parts: ["localhost"] };
|
|
9832
|
+
|
|
9810
9833
|
const parts = hostname.split(".");
|
|
9811
9834
|
|
|
9812
9835
|
const customTlds = extendedTlds.map((tld) => [tld, tld.split(".").length]);
|
|
@@ -9836,7 +9859,9 @@ var DomainParser = (function (exports) {
|
|
|
9836
9859
|
}
|
|
9837
9860
|
}
|
|
9838
9861
|
|
|
9839
|
-
|
|
9862
|
+
const isIP = /^\d{1,3}(\.\d{1,3}){3}$/.test(hostname);
|
|
9863
|
+
|
|
9864
|
+
if (detected.length == 0 && !isIP) {
|
|
9840
9865
|
throw new Error(
|
|
9841
9866
|
"Could not detect TLD. You can set allowUnknown to true for allowing unknown TLDs."
|
|
9842
9867
|
);
|
|
@@ -9853,17 +9878,29 @@ var DomainParser = (function (exports) {
|
|
|
9853
9878
|
|
|
9854
9879
|
function parse(url, options = {}) {
|
|
9855
9880
|
try {
|
|
9856
|
-
|
|
9857
|
-
const urlObject = new URL(url);
|
|
9881
|
+
const urlObject = parseUrl_1(url);
|
|
9858
9882
|
|
|
9859
|
-
|
|
9883
|
+
if (
|
|
9884
|
+
urlObject.hostname.split(".").filter((i) => i.trim()).length <= 1 &&
|
|
9885
|
+
urlObject.hostname !== "localhost"
|
|
9886
|
+
) {
|
|
9887
|
+
throw new Error(
|
|
9888
|
+
`Invalid domain name: "${urlObject.hostname}" is not a valid domain.`
|
|
9889
|
+
);
|
|
9890
|
+
}
|
|
9891
|
+
|
|
9892
|
+
const tldData = parseTld_1(url, options);
|
|
9860
9893
|
|
|
9861
9894
|
let domain = urlObject.hostname;
|
|
9862
9895
|
const hostnameParts = urlObject.hostname.split(".");
|
|
9863
9896
|
for (let i = hostnameParts.length - 1; i >= 0; i--) {
|
|
9864
9897
|
const extended = hostnameParts.slice(i);
|
|
9898
|
+
|
|
9865
9899
|
if (extended.join(".") === tldData.name) {
|
|
9866
|
-
|
|
9900
|
+
if (hostnameParts[i - 1]) {
|
|
9901
|
+
domain = hostnameParts[i - 1] + "." + extended.join(".");
|
|
9902
|
+
}
|
|
9903
|
+
|
|
9867
9904
|
break;
|
|
9868
9905
|
}
|
|
9869
9906
|
}
|
|
@@ -9873,29 +9910,36 @@ var DomainParser = (function (exports) {
|
|
|
9873
9910
|
query[key] = value;
|
|
9874
9911
|
}
|
|
9875
9912
|
|
|
9913
|
+
let urlData = {
|
|
9914
|
+
domain: domain,
|
|
9915
|
+
origin: urlObject.origin,
|
|
9916
|
+
protocol: urlObject.protocol,
|
|
9917
|
+
host: urlObject.host,
|
|
9918
|
+
hostname: urlObject.hostname,
|
|
9919
|
+
port: urlObject.port,
|
|
9920
|
+
pathname: urlObject.pathname,
|
|
9921
|
+
search: urlObject.search,
|
|
9922
|
+
hash: urlObject.hash,
|
|
9923
|
+
query,
|
|
9924
|
+
};
|
|
9925
|
+
|
|
9926
|
+
// handle for protocols that aren't supported by URL constructor
|
|
9927
|
+
if (urlObject.origin === "null") {
|
|
9928
|
+
urlData.origin = urlObject.protocol + "//" + urlObject.hostname;
|
|
9929
|
+
}
|
|
9930
|
+
|
|
9876
9931
|
return {
|
|
9877
9932
|
tld: tldData,
|
|
9878
|
-
url:
|
|
9879
|
-
domain: domain,
|
|
9880
|
-
origin: urlObject.origin,
|
|
9881
|
-
protocol: urlObject.protocol,
|
|
9882
|
-
host: urlObject.host,
|
|
9883
|
-
hostname: urlObject.hostname,
|
|
9884
|
-
port: urlObject.port,
|
|
9885
|
-
pathname: urlObject.pathname,
|
|
9886
|
-
search: urlObject.search,
|
|
9887
|
-
hash: urlObject.hash,
|
|
9888
|
-
query,
|
|
9889
|
-
},
|
|
9933
|
+
url: urlData,
|
|
9890
9934
|
};
|
|
9891
9935
|
} catch (e) {
|
|
9892
9936
|
throw new Error(`Invalid URL: ${e}`);
|
|
9893
9937
|
}
|
|
9894
9938
|
}
|
|
9895
9939
|
|
|
9896
|
-
|
|
9897
|
-
|
|
9898
|
-
var jsdomainParser = { parse, parseTld: parseTld_1 };
|
|
9940
|
+
var parse_1 = parse;
|
|
9941
|
+
|
|
9942
|
+
var jsdomainParser = { parse: parse_1, parseTld: parseTld_1 };
|
|
9899
9943
|
var jsdomainParser_1 = jsdomainParser.parse;
|
|
9900
9944
|
var jsdomainParser_2 = jsdomainParser.parseTld;
|
|
9901
9945
|
|