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.
@@ -1,5 +1,24 @@
1
- var DomainParser = (function (exports) {
2
- 'use strict';
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 = (hostname, options = {}) => {
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
- if (detected.length == 0) {
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
- if (!url.startsWith("http")) url = `http://${url}`;
9857
- const urlObject = new URL(url);
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(urlObject.hostname, options);
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
- domain = hostnameParts[i - 1] + "." + extended.join(".");
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
- console.log(parse("google.co.in"));
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
- return exports;
9909
-
9910
- })({});
9956
+ }));