forked from WhichBrowser/Parser-JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApplications.js
More file actions
127 lines (120 loc) · 3.36 KB
/
Applications.js
File metadata and controls
127 lines (120 loc) · 3.36 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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* @typedef {object} BrowserAndOtherReturn
* @property {object} browser
* @property {object} device
*/
/**
* @typedef {object} OtherReturn
* @property {object} browser
* @property {object} device
*/
const Browser = require('../model/Browser');
const Version = require('../model/Version');
/**
* Applications utility
*
* @internal
*/
class Applications {
/**
*
* @param {string} ua the User-Agent string
*
* @return {BrowserAndOtherReturn}
*/
static identifyBrowser(ua = '') {
if (ua.match(Applications.BROWSERS_REGEX)) {
for (const type of Object.keys(Applications.BROWSERS)) {
for (const item of Applications.BROWSERS[type]) {
let match;
if ((match = ua.match(item.regexp))) {
return {
browser: {
name: item.name,
hidden: item.hidden || false,
stock: false,
channel: '',
type: type,
version: match[1]
? new Version({
value: match[1],
details: item.details || null,
})
: null,
},
device: typeof item.type !== 'undefined' ? { type: item.type } : null,
};
}
}
}
}
}
/**
*
* @param {string} ua the User-Agent string
*
* @return {BrowserAndOtherReturn}
*/
static identifyOther(ua = '') {
if (ua.match(Applications.OTHERS_REGEX)) {
for (const type of Object.keys(Applications.OTHERS)) {
for (const item of Applications.OTHERS[type]) {
let match;
if ((match = ua.match(item.regexp))) {
return {
browser: {
name: item.name,
hidden: item.hidden || false,
stock: false,
channel: '',
type: type,
version: match[1]
? new Version({
value: match[1],
details: item.details || null,
})
: null,
},
device: typeof item.type !== 'undefined' ? { type: item.type } : null,
};
}
}
}
}
}
/**
*
* @param {string} ua the User-Agent string
*
* @return {Browser}
*/
static identifyBot(ua = '') {
if (!ua) {
return;
}
if (ua.match(Applications.BOTS_REGEX)) {
for (const item of Applications.BOTS) {
let match;
if ((match = ua.match(item.regexp))) {
return new Browser({
name: item.name,
stock: false,
version: match[1]
? new Version({
value: match[1],
details: item.details || null,
})
: null,
});
}
}
}
}
}
Applications.BOTS = require('../../data/applications-bots').BOTS;
Applications.BOTS_REGEX = require('../../data/regexes/applications-bots').BOTS_REGEX;
Applications.BROWSERS = require('../../data/applications-browsers').BROWSERS;
Applications.BROWSERS_REGEX = require('../../data/regexes/applications-browsers').BROWSERS_REGEX;
Applications.OTHERS = require('../../data/applications-others').OTHERS;
Applications.OTHERS_REGEX = require('../../data/regexes/applications-others').OTHERS_REGEX;
module.exports = Applications;