ua-parser-js 2.0.0-alpha.2 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +616 -0
- package/README.md +66 -0
- package/dist/ua-parser.min.js +3 -3
- package/dist/ua-parser.pack.js +3 -3
- package/package.json +60 -35
- package/src/enums/ua-parser-enums.js +236 -0
- package/src/enums/ua-parser-enums.mjs +240 -0
- package/src/extensions/ua-parser-extensions.js +248 -0
- package/src/extensions/ua-parser-extensions.mjs +252 -0
- package/src/main/ua-parser.d.ts +104 -0
- package/src/{ua-parser.js → main/ua-parser.js} +283 -206
- package/src/{ua-parser.mjs → main/ua-parser.mjs} +284 -209
- package/license.md +0 -21
- package/readme.md +0 -603
- package/src/enum/ua-parser-enum.js +0 -101
- package/src/enum/ua-parser-enum.mjs +0 -105
- package/src/extension/ua-parser-extension.js +0 -120
- package/src/extension/ua-parser-extension.mjs +0 -124
@@ -0,0 +1,248 @@
|
|
1
|
+
///////////////////////////////////////////////
|
2
|
+
/* Extensions for UAParser.js v2.0.0-beta.1
|
3
|
+
https://github.com/faisalman/ua-parser-js
|
4
|
+
Author: Faisal Salman <f@faisalman.com>
|
5
|
+
AGPLv3 License */
|
6
|
+
//////////////////////////////////////////////
|
7
|
+
|
8
|
+
/*jshint esversion: 6 */
|
9
|
+
|
10
|
+
const MODEL = 'model';
|
11
|
+
const NAME = 'name';
|
12
|
+
const TYPE = 'type';
|
13
|
+
const VENDOR = 'vendor';
|
14
|
+
const VERSION = 'version';
|
15
|
+
const MOBILE = 'mobile';
|
16
|
+
const TABLET = 'tablet';
|
17
|
+
|
18
|
+
const Apps = Object.freeze({
|
19
|
+
browser : [
|
20
|
+
[/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, 'app']]
|
21
|
+
]
|
22
|
+
});
|
23
|
+
|
24
|
+
const Bots = Object.freeze({
|
25
|
+
browser : [
|
26
|
+
// Googlebot / BingBot / MSNBot / FacebookBot
|
27
|
+
[/((?:google|bing|msn|facebook)bot(?:[\-imagevdo]{0,6})|bingpreview)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']],
|
28
|
+
|
29
|
+
// GPTBot - https://platform.openai.com/docs/gptbot
|
30
|
+
[/(gptbot)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']],
|
31
|
+
|
32
|
+
// Slackbot - https://api.slack.com/robots
|
33
|
+
[/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']]
|
34
|
+
]
|
35
|
+
});
|
36
|
+
|
37
|
+
const CLIs = Object.freeze({
|
38
|
+
browser : [
|
39
|
+
// wget / curl / lynx
|
40
|
+
[/(wget|curl|lynx)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'cli']]
|
41
|
+
]
|
42
|
+
});
|
43
|
+
|
44
|
+
const ExtraDevices = Object.freeze({
|
45
|
+
device : [[
|
46
|
+
/(nook)[\w ]+build\/(\w+)/i, // Nook
|
47
|
+
/(dell) (strea[kpr\d ]*[\dko])/i, // Dell Streak
|
48
|
+
/(le[- ]+pan)[- ]+(\w{1,9}) bui/i, // Le Pan Tablets
|
49
|
+
/(trinity)[- ]*(t\d{3}) bui/i, // Trinity Tablets
|
50
|
+
/(gigaset)[- ]+(q\w{1,9}) bui/i, // Gigaset Tablets
|
51
|
+
/(vodafone) ([\w ]+)(?:\)| bui)/i // Vodafone
|
52
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
53
|
+
|
54
|
+
/(u304aa)/i // AT&T
|
55
|
+
], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
|
56
|
+
|
57
|
+
/\bsie-(\w*)/i // Siemens
|
58
|
+
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
59
|
+
|
60
|
+
/\b(rct\w+) b/i // RCA Tablets
|
61
|
+
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
62
|
+
|
63
|
+
/\b(venue[\d ]{2,7}) b/i // Dell Venue Tablets
|
64
|
+
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
65
|
+
|
66
|
+
/\b(q(?:mv|ta)\w+) b/i // Verizon Tablet
|
67
|
+
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
68
|
+
|
69
|
+
/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i // Barnes & Noble Tablet
|
70
|
+
], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
|
71
|
+
|
72
|
+
/\b(tm\d{3}\w+) b/i
|
73
|
+
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
74
|
+
|
75
|
+
/\b(k88) b/i // ZTE K Series Tablet
|
76
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
77
|
+
|
78
|
+
/\b(nx\d{3}j) b/i // ZTE Nubia
|
79
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
80
|
+
|
81
|
+
/\b(gen\d{3}) b.+49h/i // Swiss GEN Mobile
|
82
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
83
|
+
|
84
|
+
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
85
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
86
|
+
|
87
|
+
/\b((zeki)?tb.*\b) b/i // Zeki Tablets
|
88
|
+
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
89
|
+
|
90
|
+
/\b([yr]\d{2}) b/i,
|
91
|
+
/\b(?:dragon[- ]+touch |dt)(\w{5}) b/i // Dragon Touch Tablet
|
92
|
+
], [MODEL, [VENDOR, 'Dragon Touch'], [TYPE, TABLET]], [
|
93
|
+
|
94
|
+
/\b(ns-?\w{0,9}) b/i // Insignia Tablets
|
95
|
+
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
96
|
+
|
97
|
+
/\b((nxa|next)-?\w{0,9}) b/i // NextBook Tablets
|
98
|
+
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
99
|
+
|
100
|
+
/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones
|
101
|
+
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [
|
102
|
+
|
103
|
+
/\b(lvtel\-)?(v1[12]) b/i // LvTel Phones
|
104
|
+
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
105
|
+
|
106
|
+
/\b(ph-1) /i // Essential PH-1
|
107
|
+
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [
|
108
|
+
|
109
|
+
/\b(v(100md|700na|7011|917g).*\b) b/i // Envizen Tablets
|
110
|
+
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
111
|
+
|
112
|
+
/\b(trio[-\w\. ]+) b/i // MachSpeed Tablets
|
113
|
+
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
114
|
+
|
115
|
+
/\btu_(1491) b/i // Rotor Tablets
|
116
|
+
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]]
|
117
|
+
]
|
118
|
+
});
|
119
|
+
|
120
|
+
const Emails = Object.freeze({
|
121
|
+
browser : [
|
122
|
+
// Microsoft Outlook / Thunderbird
|
123
|
+
[/(microsoft outlook|thunderbird)[\s\/]([\w\.]+)/i], [NAME, VERSION, [TYPE, 'email']]
|
124
|
+
]
|
125
|
+
});
|
126
|
+
|
127
|
+
const MediaPlayers = Object.freeze({
|
128
|
+
browser : [[
|
129
|
+
|
130
|
+
/(apple(?:coremedia|))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
131
|
+
/(coremedia) v([\w\._]+)/i
|
132
|
+
], [NAME, VERSION], [
|
133
|
+
|
134
|
+
/(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
135
|
+
], [NAME, VERSION], [
|
136
|
+
|
137
|
+
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
138
|
+
], [NAME, VERSION], [
|
139
|
+
|
140
|
+
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
141
|
+
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
142
|
+
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
143
|
+
/(clementine|music player daemon)\s([\w\.-]+)/i, // Clementine/MPD
|
144
|
+
/(lg player|nexplayer)\s([\d\.]+)/i,
|
145
|
+
/player\/(nexplayer|lg player)\s([\w\.-]+)/i // NexPlayer/LG Player
|
146
|
+
], [NAME, VERSION], [
|
147
|
+
/(nexplayer)\s([\w\.-]+)/i // Nexplayer
|
148
|
+
], [NAME, VERSION], [
|
149
|
+
|
150
|
+
/(flrp)\/([\w\.-]+)/i // Flip Player
|
151
|
+
], [[NAME, 'Flip Player'], VERSION], [
|
152
|
+
|
153
|
+
/(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i
|
154
|
+
// FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit
|
155
|
+
], [NAME], [
|
156
|
+
|
157
|
+
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i
|
158
|
+
// Gstreamer
|
159
|
+
], [NAME, VERSION], [
|
160
|
+
|
161
|
+
/(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
|
162
|
+
/(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
|
163
|
+
// Java/urllib/requests/wget/cURL
|
164
|
+
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
165
|
+
], [NAME, VERSION], [
|
166
|
+
|
167
|
+
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
168
|
+
], [[NAME, /_/g, ' '], VERSION], [
|
169
|
+
|
170
|
+
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
171
|
+
// MPlayer SVN
|
172
|
+
], [NAME, VERSION], [
|
173
|
+
|
174
|
+
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
175
|
+
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
176
|
+
], [NAME, VERSION], [
|
177
|
+
|
178
|
+
/(mplayer)/i, // MPlayer (no other info)
|
179
|
+
/(yourmuze)/i, // YourMuze
|
180
|
+
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
181
|
+
], [NAME], [
|
182
|
+
|
183
|
+
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
184
|
+
], [NAME, VERSION], [
|
185
|
+
|
186
|
+
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
187
|
+
], [NAME, VERSION], [
|
188
|
+
|
189
|
+
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
190
|
+
], [NAME, VERSION], [
|
191
|
+
|
192
|
+
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
193
|
+
/(winamp)\s([\w\.-]+)/i,
|
194
|
+
/(winamp)mpeg\/([\w\.-]+)/i
|
195
|
+
], [NAME, VERSION], [
|
196
|
+
|
197
|
+
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
198
|
+
// inlight radio
|
199
|
+
], [NAME], [
|
200
|
+
|
201
|
+
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
202
|
+
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
203
|
+
// SoundTap/Totem/Stagefright/Streamium
|
204
|
+
], [NAME, VERSION], [
|
205
|
+
|
206
|
+
/(smp)([\d\.]+)/i // SMP
|
207
|
+
], [NAME, VERSION], [
|
208
|
+
|
209
|
+
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
210
|
+
/(vlc)\/([\w\.-]+)/i,
|
211
|
+
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
212
|
+
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
213
|
+
/(itunes)\/([\d\.]+)/i // iTunes
|
214
|
+
], [NAME, VERSION], [
|
215
|
+
|
216
|
+
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
217
|
+
/(windows-media-player)\/([\w\.-]+)/i
|
218
|
+
], [[NAME, /-/g, ' '], VERSION], [
|
219
|
+
|
220
|
+
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
221
|
+
// Windows Media Server
|
222
|
+
], [VERSION, [NAME, 'Windows']], [
|
223
|
+
|
224
|
+
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
225
|
+
], [NAME, VERSION], [
|
226
|
+
|
227
|
+
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
228
|
+
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
229
|
+
], [[NAME, 'rad.io'], VERSION]
|
230
|
+
]
|
231
|
+
});
|
232
|
+
|
233
|
+
const Modules = Object.freeze({
|
234
|
+
browser : [
|
235
|
+
// Axios/jsdom/Scrapy
|
236
|
+
[/\b(axios|jsdom|scrapy)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'module']]
|
237
|
+
]
|
238
|
+
});
|
239
|
+
|
240
|
+
module.exports = {
|
241
|
+
Apps,
|
242
|
+
Bots,
|
243
|
+
CLIs,
|
244
|
+
ExtraDevices,
|
245
|
+
Emails,
|
246
|
+
MediaPlayers,
|
247
|
+
Modules
|
248
|
+
};
|
@@ -0,0 +1,252 @@
|
|
1
|
+
// Generated ESM version of ua-parser-js/extensions
|
2
|
+
// DO NOT EDIT THIS FILE!
|
3
|
+
// Source: /src/extensions/ua-parser-extensions.js
|
4
|
+
|
5
|
+
///////////////////////////////////////////////
|
6
|
+
/* Extensions for UAParser.js v2.0.0-beta.1
|
7
|
+
https://github.com/faisalman/ua-parser-js
|
8
|
+
Author: Faisal Salman <f@faisalman.com>
|
9
|
+
AGPLv3 License */
|
10
|
+
//////////////////////////////////////////////
|
11
|
+
|
12
|
+
/*jshint esversion: 6 */
|
13
|
+
|
14
|
+
const MODEL = 'model';
|
15
|
+
const NAME = 'name';
|
16
|
+
const TYPE = 'type';
|
17
|
+
const VENDOR = 'vendor';
|
18
|
+
const VERSION = 'version';
|
19
|
+
const MOBILE = 'mobile';
|
20
|
+
const TABLET = 'tablet';
|
21
|
+
|
22
|
+
const Apps = Object.freeze({
|
23
|
+
browser : [
|
24
|
+
[/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, 'app']]
|
25
|
+
]
|
26
|
+
});
|
27
|
+
|
28
|
+
const Bots = Object.freeze({
|
29
|
+
browser : [
|
30
|
+
// Googlebot / BingBot / MSNBot / FacebookBot
|
31
|
+
[/((?:google|bing|msn|facebook)bot(?:[\-imagevdo]{0,6})|bingpreview)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']],
|
32
|
+
|
33
|
+
// GPTBot - https://platform.openai.com/docs/gptbot
|
34
|
+
[/(gptbot)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']],
|
35
|
+
|
36
|
+
// Slackbot - https://api.slack.com/robots
|
37
|
+
[/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']]
|
38
|
+
]
|
39
|
+
});
|
40
|
+
|
41
|
+
const CLIs = Object.freeze({
|
42
|
+
browser : [
|
43
|
+
// wget / curl / lynx
|
44
|
+
[/(wget|curl|lynx)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'cli']]
|
45
|
+
]
|
46
|
+
});
|
47
|
+
|
48
|
+
const ExtraDevices = Object.freeze({
|
49
|
+
device : [[
|
50
|
+
/(nook)[\w ]+build\/(\w+)/i, // Nook
|
51
|
+
/(dell) (strea[kpr\d ]*[\dko])/i, // Dell Streak
|
52
|
+
/(le[- ]+pan)[- ]+(\w{1,9}) bui/i, // Le Pan Tablets
|
53
|
+
/(trinity)[- ]*(t\d{3}) bui/i, // Trinity Tablets
|
54
|
+
/(gigaset)[- ]+(q\w{1,9}) bui/i, // Gigaset Tablets
|
55
|
+
/(vodafone) ([\w ]+)(?:\)| bui)/i // Vodafone
|
56
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
57
|
+
|
58
|
+
/(u304aa)/i // AT&T
|
59
|
+
], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
|
60
|
+
|
61
|
+
/\bsie-(\w*)/i // Siemens
|
62
|
+
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
63
|
+
|
64
|
+
/\b(rct\w+) b/i // RCA Tablets
|
65
|
+
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
66
|
+
|
67
|
+
/\b(venue[\d ]{2,7}) b/i // Dell Venue Tablets
|
68
|
+
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
69
|
+
|
70
|
+
/\b(q(?:mv|ta)\w+) b/i // Verizon Tablet
|
71
|
+
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
72
|
+
|
73
|
+
/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i // Barnes & Noble Tablet
|
74
|
+
], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
|
75
|
+
|
76
|
+
/\b(tm\d{3}\w+) b/i
|
77
|
+
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
78
|
+
|
79
|
+
/\b(k88) b/i // ZTE K Series Tablet
|
80
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
81
|
+
|
82
|
+
/\b(nx\d{3}j) b/i // ZTE Nubia
|
83
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
84
|
+
|
85
|
+
/\b(gen\d{3}) b.+49h/i // Swiss GEN Mobile
|
86
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
87
|
+
|
88
|
+
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
89
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
90
|
+
|
91
|
+
/\b((zeki)?tb.*\b) b/i // Zeki Tablets
|
92
|
+
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
93
|
+
|
94
|
+
/\b([yr]\d{2}) b/i,
|
95
|
+
/\b(?:dragon[- ]+touch |dt)(\w{5}) b/i // Dragon Touch Tablet
|
96
|
+
], [MODEL, [VENDOR, 'Dragon Touch'], [TYPE, TABLET]], [
|
97
|
+
|
98
|
+
/\b(ns-?\w{0,9}) b/i // Insignia Tablets
|
99
|
+
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
100
|
+
|
101
|
+
/\b((nxa|next)-?\w{0,9}) b/i // NextBook Tablets
|
102
|
+
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
103
|
+
|
104
|
+
/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones
|
105
|
+
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [
|
106
|
+
|
107
|
+
/\b(lvtel\-)?(v1[12]) b/i // LvTel Phones
|
108
|
+
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
109
|
+
|
110
|
+
/\b(ph-1) /i // Essential PH-1
|
111
|
+
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [
|
112
|
+
|
113
|
+
/\b(v(100md|700na|7011|917g).*\b) b/i // Envizen Tablets
|
114
|
+
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
115
|
+
|
116
|
+
/\b(trio[-\w\. ]+) b/i // MachSpeed Tablets
|
117
|
+
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
118
|
+
|
119
|
+
/\btu_(1491) b/i // Rotor Tablets
|
120
|
+
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]]
|
121
|
+
]
|
122
|
+
});
|
123
|
+
|
124
|
+
const Emails = Object.freeze({
|
125
|
+
browser : [
|
126
|
+
// Microsoft Outlook / Thunderbird
|
127
|
+
[/(microsoft outlook|thunderbird)[\s\/]([\w\.]+)/i], [NAME, VERSION, [TYPE, 'email']]
|
128
|
+
]
|
129
|
+
});
|
130
|
+
|
131
|
+
const MediaPlayers = Object.freeze({
|
132
|
+
browser : [[
|
133
|
+
|
134
|
+
/(apple(?:coremedia|))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
135
|
+
/(coremedia) v([\w\._]+)/i
|
136
|
+
], [NAME, VERSION], [
|
137
|
+
|
138
|
+
/(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
139
|
+
], [NAME, VERSION], [
|
140
|
+
|
141
|
+
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
142
|
+
], [NAME, VERSION], [
|
143
|
+
|
144
|
+
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
145
|
+
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
146
|
+
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
147
|
+
/(clementine|music player daemon)\s([\w\.-]+)/i, // Clementine/MPD
|
148
|
+
/(lg player|nexplayer)\s([\d\.]+)/i,
|
149
|
+
/player\/(nexplayer|lg player)\s([\w\.-]+)/i // NexPlayer/LG Player
|
150
|
+
], [NAME, VERSION], [
|
151
|
+
/(nexplayer)\s([\w\.-]+)/i // Nexplayer
|
152
|
+
], [NAME, VERSION], [
|
153
|
+
|
154
|
+
/(flrp)\/([\w\.-]+)/i // Flip Player
|
155
|
+
], [[NAME, 'Flip Player'], VERSION], [
|
156
|
+
|
157
|
+
/(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i
|
158
|
+
// FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit
|
159
|
+
], [NAME], [
|
160
|
+
|
161
|
+
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i
|
162
|
+
// Gstreamer
|
163
|
+
], [NAME, VERSION], [
|
164
|
+
|
165
|
+
/(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
|
166
|
+
/(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
|
167
|
+
// Java/urllib/requests/wget/cURL
|
168
|
+
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
169
|
+
], [NAME, VERSION], [
|
170
|
+
|
171
|
+
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
172
|
+
], [[NAME, /_/g, ' '], VERSION], [
|
173
|
+
|
174
|
+
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
175
|
+
// MPlayer SVN
|
176
|
+
], [NAME, VERSION], [
|
177
|
+
|
178
|
+
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
179
|
+
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
180
|
+
], [NAME, VERSION], [
|
181
|
+
|
182
|
+
/(mplayer)/i, // MPlayer (no other info)
|
183
|
+
/(yourmuze)/i, // YourMuze
|
184
|
+
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
185
|
+
], [NAME], [
|
186
|
+
|
187
|
+
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
188
|
+
], [NAME, VERSION], [
|
189
|
+
|
190
|
+
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
191
|
+
], [NAME, VERSION], [
|
192
|
+
|
193
|
+
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
194
|
+
], [NAME, VERSION], [
|
195
|
+
|
196
|
+
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
197
|
+
/(winamp)\s([\w\.-]+)/i,
|
198
|
+
/(winamp)mpeg\/([\w\.-]+)/i
|
199
|
+
], [NAME, VERSION], [
|
200
|
+
|
201
|
+
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
202
|
+
// inlight radio
|
203
|
+
], [NAME], [
|
204
|
+
|
205
|
+
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
206
|
+
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
207
|
+
// SoundTap/Totem/Stagefright/Streamium
|
208
|
+
], [NAME, VERSION], [
|
209
|
+
|
210
|
+
/(smp)([\d\.]+)/i // SMP
|
211
|
+
], [NAME, VERSION], [
|
212
|
+
|
213
|
+
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
214
|
+
/(vlc)\/([\w\.-]+)/i,
|
215
|
+
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
216
|
+
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
217
|
+
/(itunes)\/([\d\.]+)/i // iTunes
|
218
|
+
], [NAME, VERSION], [
|
219
|
+
|
220
|
+
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
221
|
+
/(windows-media-player)\/([\w\.-]+)/i
|
222
|
+
], [[NAME, /-/g, ' '], VERSION], [
|
223
|
+
|
224
|
+
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
225
|
+
// Windows Media Server
|
226
|
+
], [VERSION, [NAME, 'Windows']], [
|
227
|
+
|
228
|
+
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
229
|
+
], [NAME, VERSION], [
|
230
|
+
|
231
|
+
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
232
|
+
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
233
|
+
], [[NAME, 'rad.io'], VERSION]
|
234
|
+
]
|
235
|
+
});
|
236
|
+
|
237
|
+
const Modules = Object.freeze({
|
238
|
+
browser : [
|
239
|
+
// Axios/jsdom/Scrapy
|
240
|
+
[/\b(axios|jsdom|scrapy)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'module']]
|
241
|
+
]
|
242
|
+
});
|
243
|
+
|
244
|
+
export {
|
245
|
+
Apps,
|
246
|
+
Bots,
|
247
|
+
CLIs,
|
248
|
+
ExtraDevices,
|
249
|
+
Emails,
|
250
|
+
MediaPlayers,
|
251
|
+
Modules
|
252
|
+
};
|
@@ -0,0 +1,104 @@
|
|
1
|
+
// Type definitions for UAParser.js v2.0.0-beta.1
|
2
|
+
// Project: https://github.com/faisalman/ua-parser-js
|
3
|
+
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
4
|
+
|
5
|
+
declare namespace UAParser {
|
6
|
+
|
7
|
+
interface IData<T> {
|
8
|
+
is(val: string): boolean;
|
9
|
+
toString(): string;
|
10
|
+
withClientHints(): PromiseLike<T> | T;
|
11
|
+
withFeatureCheck(): T;
|
12
|
+
}
|
13
|
+
|
14
|
+
interface IBrowser extends IData<IBrowser> {
|
15
|
+
name?: string;
|
16
|
+
version?: string;
|
17
|
+
major?: string;
|
18
|
+
}
|
19
|
+
|
20
|
+
interface ICPU extends IData<ICPU> {
|
21
|
+
architecture?: 'ia32' | 'ia64' | 'amd64' | 'arm' | 'arm64' | 'armhf' | 'avr' | 'irix' | 'irix64' | 'mips' | 'mips64' | '68k' | 'ppc' | 'sparc' | 'sparc64';
|
22
|
+
}
|
23
|
+
|
24
|
+
interface IDevice extends IData<IDevice> {
|
25
|
+
type?: 'mobile' | 'tablet' | 'console' | 'smarttv' | 'wearable';
|
26
|
+
vendor?: string;
|
27
|
+
model?: string;
|
28
|
+
}
|
29
|
+
|
30
|
+
interface IEngine extends IData<IEngine> {
|
31
|
+
name?: 'Amaya' | 'Blink' | 'EdgeHTML' | 'Flow' | 'Gecko' | 'Goanna' | 'iCab' | 'KHTML' | 'LibWeb' | 'Links' | 'Lynx' | 'NetFront' | 'NetSurf' | 'Presto' | 'Tasman' | 'Trident' | 'w3m' | 'WebKit';
|
32
|
+
version?: string;
|
33
|
+
}
|
34
|
+
|
35
|
+
interface IOS extends IData<IOS> {
|
36
|
+
name?: string;
|
37
|
+
version?: string;
|
38
|
+
}
|
39
|
+
|
40
|
+
interface IResult extends IData<IResult> {
|
41
|
+
ua: string;
|
42
|
+
browser: IBrowser;
|
43
|
+
cpu: ICPU;
|
44
|
+
device: IDevice;
|
45
|
+
engine: IEngine;
|
46
|
+
os: IOS;
|
47
|
+
}
|
48
|
+
|
49
|
+
type RegexMap = ((RegExp | string | (string | RegExp | Function)[])[])[];
|
50
|
+
|
51
|
+
export function UAParser(uastring?: string, extensions?: Record<string, RegexMap>, headers?: Record<string, string>): IResult;
|
52
|
+
export function UAParser(uastring?: string, headers?: Record<string, string>): IResult;
|
53
|
+
export function UAParser(extensions?: Record<string, RegexMap>, headers?: Record<string, string>): IResult;
|
54
|
+
export function UAParser(headers?: Record<string, string>): IResult;
|
55
|
+
|
56
|
+
export class UAParser {
|
57
|
+
|
58
|
+
static readonly BROWSER: {
|
59
|
+
NAME: 'name';
|
60
|
+
VERSION: 'version';
|
61
|
+
MAJOR: 'major';
|
62
|
+
};
|
63
|
+
static readonly CPU: {
|
64
|
+
ARCHITECTURE: 'architecture';
|
65
|
+
};
|
66
|
+
static readonly DEVICE: {
|
67
|
+
TYPE: 'type';
|
68
|
+
VENDOR: 'vendor';
|
69
|
+
MODEL: 'model';
|
70
|
+
CONSOLE: 'console';
|
71
|
+
MOBILE: 'mobile';
|
72
|
+
SMARTTV: 'smarttv';
|
73
|
+
TABLET: 'tablet';
|
74
|
+
WEARABLE: 'wearable';
|
75
|
+
EMBEDDED: 'embedded';
|
76
|
+
};
|
77
|
+
static readonly ENGINE: {
|
78
|
+
NAME: 'name';
|
79
|
+
VERSION: 'version';
|
80
|
+
};
|
81
|
+
static readonly OS: {
|
82
|
+
NAME: 'name';
|
83
|
+
VERSION: 'version';
|
84
|
+
};
|
85
|
+
static readonly VERSION: string;
|
86
|
+
|
87
|
+
constructor(uastring?: string, extensions?: Record<string, RegexMap>, headers?: Record<string, string>);
|
88
|
+
constructor(uastring?: string, headers?: Record<string, string>);
|
89
|
+
constructor(extensions?: Record<string, RegexMap>, headers?: Record<string, string>);
|
90
|
+
constructor(headers?: Record<string, string>);
|
91
|
+
|
92
|
+
getUA(): string;
|
93
|
+
getBrowser(): IBrowser;
|
94
|
+
getCPU(): ICPU;
|
95
|
+
getDevice(): IDevice;
|
96
|
+
getEngine(): IEngine;
|
97
|
+
getOS(): IOS;
|
98
|
+
getResult(): IResult;
|
99
|
+
setUA(uastring: string): UAParser;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
export as namespace UAParser;
|
104
|
+
export = UAParser;
|