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