blob: 172b8c814f53492f21fc13c20ac51c5b0f6887a8 (
plain)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
"use strict";
function formatApiLink(...values) {
let parts = [];
for (let value of values) {
if (value.constructor === Object) {
// assert this is the last piece
let variableParts = [];
for (let key of Object.keys(value)) {
if (value[key]) {
variableParts.push(
key + "=" + encodeURIComponent(value[key].toString())
);
}
}
if (variableParts.length) {
parts.push("?" + variableParts.join("&"));
}
break;
} else {
parts.push(encodeURIComponent(value.toString()));
}
}
return "/" + parts.join("/");
}
function escapeParam(text) {
return encodeURIComponent(text);
}
function unescapeParam(text) {
return decodeURIComponent(text);
}
function getPostsQuery(parameters) {
let normalQuery = parameters.query || "";
let metricQuery = (parameters.metrics || "")
.split(" ") //see metric_header_control
.filter(m => m)
.map(m => m + " sort:metric-" + m)
.join(" ");
return normalQuery + " " + metricQuery;
}
function formatClientLink(...values) {
let parts = [];
for (let value of values) {
if (value.constructor === Object) {
// assert this is the last piece
let variableParts = [];
for (let key of Object.keys(value)) {
if (value[key]) {
variableParts.push(
key + "=" + escapeParam(value[key].toString())
);
}
}
if (variableParts.length) {
parts.push(variableParts.join(";"));
}
break;
} else {
parts.push(escapeParam(value.toString()));
}
}
return parts.join("/");
}
function extractHostname(url) {
// https://stackoverflow.com/a/23945027
return url
.split("/")
[url.indexOf("//") > -1 ? 2 : 0].split(":")[0]
.split("?")[0];
}
function extractRootDomain(url) {
// https://stackoverflow.com/a/23945027
let domain = extractHostname(url);
let splitArr = domain.split(".");
let arrLen = splitArr.length;
// if there is a subdomain
if (arrLen > 2) {
domain = splitArr[arrLen - 2] + "." + splitArr[arrLen - 1];
// check to see if it's using a Country Code Top Level Domain (ccTLD) (i.e. ".me.uk")
if (
splitArr[arrLen - 2].length === 2 &&
splitArr[arrLen - 1].length === 2
) {
// this is using a ccTLD
domain = splitArr[arrLen - 3] + "." + domain;
}
}
return domain;
}
function escapeTagName(text) {
return text.replace(/:/g, "\\:").replace(/\./g, "\\.");
}
module.exports = {
getPostsQuery: getPostsQuery,
formatClientLink: formatClientLink,
formatApiLink: formatApiLink,
escapeTagName: escapeTagName,
escapeParam: escapeParam,
unescapeParam: unescapeParam,
extractHostname: extractHostname,
extractRootDomain: extractRootDomain,
};
|