Completed
Push — master ( c670d8...934051 )
by Alejandro
13s queued 11s
created

src/utils/helpers/visits.js   A

Complexity

Total Complexity 6
Complexity/F 3

Size

Lines of Code 37
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
wmc 6
eloc 25
mnd 4
bc 4
fnc 2
dl 0
loc 37
ccs 11
cts 12
cp 0.9167
rs 10
bpm 2
cpm 3
noi 0
c 0
b 0
f 0
1
import bowser from 'bowser';
2
import { zipObj } from 'ramda';
3
import { hasValue } from '../utils';
4
5 5
const DEFAULT = 'Others';
6 5
const BROWSERS_WHITELIST = [
7
  'Android Browser',
8
  'Chrome',
9
  'Chromium',
10
  'Firefox',
11
  'Internet Explorer',
12
  'Microsoft Edge',
13
  'Opera',
14
  'Safari',
15
  'Samsung Internet for Android',
16
  'Vivaldi',
17
  'WeChat',
18
];
19
20 5
export const parseUserAgent = (userAgent) => {
21 10
  if (!hasValue(userAgent)) {
22
    return { browser: DEFAULT, os: DEFAULT };
23
  }
24
25 10
  const { browser: { name: browser }, os: { name: os } } = bowser.parse(userAgent);
26
27 10
  return { os: os || DEFAULT, browser: browser && BROWSERS_WHITELIST.includes(browser) ? browser : DEFAULT };
28
};
29
30 5
export const extractDomain = (url) => {
31 10
  if (!hasValue(url)) {
32 4
    return 'Direct';
33
  }
34
35 6
  const domain = url.includes('://') ? url.split('/')[2] : url.split('/')[0];
36
37 6
  return domain.split(':')[0];
38
};
39
40
export const fillTheGaps = (stats, labels) => Object.values({ ...zipObj(labels, labels.map(() => 0)), ...stats });
41