Total Complexity | 6 |
Complexity/F | 3 |
Lines of Code | 37 |
Function Count | 2 |
Duplicated Lines | 0 |
Ratio | 0 % |
Coverage | 91.67% |
Changes | 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 | }; |
||
41 |