blob: 1fbadf5e0c1c4bc177885433172a3df24e1d0bcb (
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
|
'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 escapeColons(text) {
return text.replace(new RegExp(':', 'g'), '\\:');
}
module.exports = {
getPostsQuery: getPostsQuery,
formatClientLink: formatClientLink,
formatApiLink: formatApiLink,
escapeColons: escapeColons,
escapeParam: escapeParam,
unescapeParam: unescapeParam,
extractHostname: extractHostname,
extractRootDomain: extractRootDomain,
};
|
© 2015 - 2026 Jakob L. Kreuze