ua-parser-js 2.0.0-alpha.2 → 2.0.0-alpha.3
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/dist/ua-parser.min.js +2 -2
- package/dist/ua-parser.pack.js +2 -2
- package/package.json +29 -30
- package/readme.md +107 -57
- package/src/{enum/ua-parser-enum.js → enums/ua-parser-enums.js} +4 -2
- package/src/{enum/ua-parser-enum.mjs → enums/ua-parser-enums.mjs} +5 -3
- package/src/extensions/ua-parser-extensions.js +248 -0
- package/src/extensions/ua-parser-extensions.mjs +252 -0
- package/src/helpers/ua-parser-helpers.js +42 -0
- package/src/helpers/ua-parser-helpers.mjs +46 -0
- package/src/{ua-parser.js → main/ua-parser.js} +242 -199
- package/src/{ua-parser.mjs → main/ua-parser.mjs} +243 -202
- package/src/extension/ua-parser-extension.js +0 -120
- package/src/extension/ua-parser-extension.mjs +0 -124
@@ -0,0 +1,252 @@
|
|
1
|
+
// Generated ESM version of UAParser.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-alpha.3
|
7
|
+
https://github.com/faisalman/ua-parser-js
|
8
|
+
Author: Faisal Salman <f@faisalman.com>
|
9
|
+
MIT 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,42 @@
|
|
1
|
+
///////////////////////////////////////////////
|
2
|
+
/* Helpers for UAParser.js v2.0.0-alpha.3
|
3
|
+
https://github.com/faisalman/ua-parser-js
|
4
|
+
Author: Faisal Salman <f@faisalman.com>
|
5
|
+
MIT License */
|
6
|
+
//////////////////////////////////////////////
|
7
|
+
|
8
|
+
/*jshint esversion: 6 */
|
9
|
+
|
10
|
+
/*
|
11
|
+
# Reference:
|
12
|
+
https://www.chromium.org/updates/ua-reduction/
|
13
|
+
|
14
|
+
# Desktop
|
15
|
+
---
|
16
|
+
Format:
|
17
|
+
Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 Safari/537.36
|
18
|
+
|
19
|
+
Possible <unifiedPlatform> values:
|
20
|
+
- Windows NT 10.0; Win64; x64
|
21
|
+
- Macintosh; Intel Mac OS X 10_15_7
|
22
|
+
- X11; Linux x86_64
|
23
|
+
- X11; CrOS x86_64 14541.0.0
|
24
|
+
- Fuchsia
|
25
|
+
|
26
|
+
# Mobile & Tablet: (except iOS/Android WebView)
|
27
|
+
---
|
28
|
+
Format:
|
29
|
+
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36
|
30
|
+
|
31
|
+
Possible <deviceCompat> values:
|
32
|
+
- "Mobile"
|
33
|
+
- "" (empty string for Tablets & Desktop)
|
34
|
+
*/
|
35
|
+
|
36
|
+
const frozenUA = /Mozilla\/5\.0 \((Windows NT 10\.0; Win64; x64|Macintosh; Intel Mac OS X 10_15_7|X11; Linux x86_64|X11; CrOS x86_64 14541\.0\.0|Fuchsia|Linux; Android 10; K)\) AppleWebKit\/537\.36 \(KHTML, like Gecko\) Chrome\/\d+\.0\.0\.0 (Mobile )?Safari\/537\.36/;
|
37
|
+
|
38
|
+
const isFrozenUA = str => frozenUA.test(str);
|
39
|
+
|
40
|
+
module.exports = {
|
41
|
+
isFrozenUA
|
42
|
+
};
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// Generated ESM version of UAParser.js helpers
|
2
|
+
// DO NOT EDIT THIS FILE!
|
3
|
+
// Source: /src/helpers/ua-parser-helpers.js
|
4
|
+
|
5
|
+
///////////////////////////////////////////////
|
6
|
+
/* Helpers for UAParser.js v2.0.0-alpha.3
|
7
|
+
https://github.com/faisalman/ua-parser-js
|
8
|
+
Author: Faisal Salman <f@faisalman.com>
|
9
|
+
MIT License */
|
10
|
+
//////////////////////////////////////////////
|
11
|
+
|
12
|
+
/*jshint esversion: 6 */
|
13
|
+
|
14
|
+
/*
|
15
|
+
# Reference:
|
16
|
+
https://www.chromium.org/updates/ua-reduction/
|
17
|
+
|
18
|
+
# Desktop
|
19
|
+
---
|
20
|
+
Format:
|
21
|
+
Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 Safari/537.36
|
22
|
+
|
23
|
+
Possible <unifiedPlatform> values:
|
24
|
+
- Windows NT 10.0; Win64; x64
|
25
|
+
- Macintosh; Intel Mac OS X 10_15_7
|
26
|
+
- X11; Linux x86_64
|
27
|
+
- X11; CrOS x86_64 14541.0.0
|
28
|
+
- Fuchsia
|
29
|
+
|
30
|
+
# Mobile & Tablet: (except iOS/Android WebView)
|
31
|
+
---
|
32
|
+
Format:
|
33
|
+
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36
|
34
|
+
|
35
|
+
Possible <deviceCompat> values:
|
36
|
+
- "Mobile"
|
37
|
+
- "" (empty string for Tablets & Desktop)
|
38
|
+
*/
|
39
|
+
|
40
|
+
const frozenUA = /Mozilla\/5\.0 \((Windows NT 10\.0; Win64; x64|Macintosh; Intel Mac OS X 10_15_7|X11; Linux x86_64|X11; CrOS x86_64 14541\.0\.0|Fuchsia|Linux; Android 10; K)\) AppleWebKit\/537\.36 \(KHTML, like Gecko\) Chrome\/\d+\.0\.0\.0 (Mobile )?Safari\/537\.36/;
|
41
|
+
|
42
|
+
const isFrozenUA = str => frozenUA.test(str);
|
43
|
+
|
44
|
+
export {
|
45
|
+
isFrozenUA
|
46
|
+
};
|