getHostKey.js
1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"use strict";
var isBrowser = require("is-browser");
var parseDomain,parseUrl;
if (isBrowser === true)
{
parseDomain = function(){ return null };
parseUrl = require("url-parse");
}
else
{
parseDomain = require("parse-domain");
parseUrl = require("url").parse;
}
function getHostKey(url, options)
{
var domainObj,port,protocol,urlObj;
var key = "";
if (typeof url==="string" || url instanceof String===true)
{
urlObj = parseUrl(url);
}
else
{
urlObj = url;
}
protocol = urlObj.protocol;
// Not using strict equals because `urlObj` might be a foreign object type
if (!protocol || !urlObj.hostname)
{
return false;
}
// Remove ":" suffix
if (protocol.indexOf(":") === protocol.length-1)
{
protocol = protocol.substr(0, protocol.length-1);
}
port = urlObj.port;
// Get default port
if (port==null && options.defaultPorts[protocol]!==undefined)
{
port = options.defaultPorts[protocol];
}
if (options.ignoreSchemes === false)
{
key += protocol + "://";
}
if (options.ignoreSubdomains === false)
{
key += urlObj.hostname;
}
else
{
domainObj = parseDomain(urlObj.hostname);
// If unknown top-level-domain (.com, etc)
// Or, if running in a browser
if (domainObj === null)
{
key += urlObj.hostname;
}
else
{
key += domainObj.domain + "." + domainObj.tld;
}
}
if (options.ignorePorts===false && port!=null)
{
key += ":" + port;
}
key += "/";
return key;
}
module.exports = getHostKey;