ua-parser-js 1.0.2 → 1.0.37
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/license.md +1 -1
- package/package.json +18 -2
- package/readme.md +110 -33
- package/src/ua-parser.js +144 -72
- package/.github/FUNDING.yml +0 -12
- package/.github/workflows/run-test.yml +0 -17
- package/.jshintrc +0 -3
- package/.travis.yml +0 -18
- package/bower.json +0 -17
- package/changelog.md +0 -3
- package/package.js +0 -12
- package/security.md +0 -5
- package/test/browser-test.json +0 -1467
- package/test/cpu-test.json +0 -210
- package/test/device-test.json +0 -2924
- package/test/engine-test.json +0 -155
- package/test/mediaplayer-test.json +0 -582
- package/test/os-test.json +0 -1118
- package/test/test.js +0 -168
package/src/ua-parser.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/////////////////////////////////////////////////////////////////////////////////
|
|
2
|
-
/* UAParser.js v1.0.
|
|
2
|
+
/* UAParser.js v1.0.37
|
|
3
3
|
Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
|
|
4
4
|
MIT License *//*
|
|
5
5
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
/////////////
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var LIBVERSION = '1.0.
|
|
20
|
+
var LIBVERSION = '1.0.37',
|
|
21
21
|
EMPTY = '',
|
|
22
22
|
UNKNOWN = '?',
|
|
23
23
|
FUNC_TYPE = 'function',
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
SMARTTV = 'smarttv',
|
|
38
38
|
WEARABLE = 'wearable',
|
|
39
39
|
EMBEDDED = 'embedded',
|
|
40
|
-
UA_MAX_LENGTH =
|
|
40
|
+
UA_MAX_LENGTH = 500;
|
|
41
41
|
|
|
42
42
|
var AMAZON = 'Amazon',
|
|
43
43
|
APPLE = 'Apple',
|
|
@@ -54,10 +54,13 @@
|
|
|
54
54
|
MOTOROLA = 'Motorola',
|
|
55
55
|
OPERA = 'Opera',
|
|
56
56
|
SAMSUNG = 'Samsung',
|
|
57
|
+
SHARP = 'Sharp',
|
|
57
58
|
SONY = 'Sony',
|
|
58
59
|
XIAOMI = 'Xiaomi',
|
|
59
60
|
ZEBRA = 'Zebra',
|
|
60
|
-
FACEBOOK
|
|
61
|
+
FACEBOOK = 'Facebook',
|
|
62
|
+
CHROMIUM_OS = 'Chromium OS',
|
|
63
|
+
MAC_OS = 'Mac OS';
|
|
61
64
|
|
|
62
65
|
///////////
|
|
63
66
|
// Helper
|
|
@@ -92,7 +95,7 @@
|
|
|
92
95
|
},
|
|
93
96
|
trim = function (str, len) {
|
|
94
97
|
if (typeof(str) === STR_TYPE) {
|
|
95
|
-
str = str.replace(/^\s\s*/, EMPTY)
|
|
98
|
+
str = str.replace(/^\s\s*/, EMPTY);
|
|
96
99
|
return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
|
97
100
|
}
|
|
98
101
|
};
|
|
@@ -115,6 +118,7 @@
|
|
|
115
118
|
// try matching uastring with regexes
|
|
116
119
|
while (j < regex.length && !matches) {
|
|
117
120
|
|
|
121
|
+
if (!regex[j]) { break; }
|
|
118
122
|
matches = regex[j++].exec(ua);
|
|
119
123
|
|
|
120
124
|
if (!!matches) {
|
|
@@ -223,30 +227,34 @@
|
|
|
223
227
|
], [VERSION, [NAME, OPERA]], [
|
|
224
228
|
|
|
225
229
|
// Mixed
|
|
230
|
+
/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu
|
|
231
|
+
], [VERSION, [NAME, 'Baidu']], [
|
|
226
232
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
|
227
233
|
/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
|
228
234
|
// Trident based
|
|
229
|
-
/(avant
|
|
230
|
-
/(ba?idubrowser)[\/ ]?([\w\.]+)/i, // Baidu Browser
|
|
235
|
+
/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser
|
|
231
236
|
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
|
|
232
237
|
|
|
233
238
|
// Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
|
234
|
-
/(flock|rockmelt|midori|epiphany|silk|skyfire|
|
|
239
|
+
/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
|
|
235
240
|
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
|
|
241
|
+
/(heytap|ovi)browser\/([\d\.]+)/i, // Heytap/Ovi
|
|
236
242
|
/(weibo)__([\d\.]+)/i // Weibo
|
|
237
243
|
], [NAME, VERSION], [
|
|
238
244
|
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
|
|
239
245
|
], [VERSION, [NAME, 'UC'+BROWSER]], [
|
|
240
|
-
|
|
241
|
-
]
|
|
246
|
+
/microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
|
|
247
|
+
/\bqbcore\/([\w\.]+).+microm/i,
|
|
242
248
|
/micromessenger\/([\w\.]+)/i // WeChat
|
|
243
249
|
], [VERSION, [NAME, 'WeChat']], [
|
|
244
250
|
/konqueror\/([\w\.]+)/i // Konqueror
|
|
245
251
|
], [VERSION, [NAME, 'Konqueror']], [
|
|
246
252
|
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i // IE11
|
|
247
253
|
], [VERSION, [NAME, 'IE']], [
|
|
248
|
-
/
|
|
254
|
+
/ya(?:search)?browser\/([\w\.]+)/i // Yandex
|
|
249
255
|
], [VERSION, [NAME, 'Yandex']], [
|
|
256
|
+
/slbrowser\/([\w\.]+)/i // Smart Lenovo Browser
|
|
257
|
+
], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [
|
|
250
258
|
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
|
|
251
259
|
], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [
|
|
252
260
|
/\bfocus\/([\w\.]+)/i // Firefox Focus
|
|
@@ -264,28 +272,40 @@
|
|
|
264
272
|
/fxios\/([-\w\.]+)/i // Firefox for iOS
|
|
265
273
|
], [VERSION, [NAME, FIREFOX]], [
|
|
266
274
|
/\bqihu|(qi?ho?o?|360)browser/i // 360
|
|
267
|
-
], [[NAME, '360 '+BROWSER]], [
|
|
268
|
-
/(oculus|
|
|
269
|
-
], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [
|
|
275
|
+
], [[NAME, '360 ' + BROWSER]], [
|
|
276
|
+
/(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i
|
|
277
|
+
], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser
|
|
278
|
+
/samsungbrowser\/([\w\.]+)/i // Samsung Internet
|
|
279
|
+
], [VERSION, [NAME, SAMSUNG + ' Internet']], [
|
|
270
280
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
|
271
281
|
], [[NAME, /_/g, ' '], VERSION], [
|
|
282
|
+
/metasr[\/ ]?([\d\.]+)/i // Sogou Explorer
|
|
283
|
+
], [VERSION, [NAME, 'Sogou Explorer']], [
|
|
284
|
+
/(sogou)mo\w+\/([\d\.]+)/i // Sogou Mobile
|
|
285
|
+
], [[NAME, 'Sogou Mobile'], VERSION], [
|
|
272
286
|
/(electron)\/([\w\.]+) safari/i, // Electron-based App
|
|
273
287
|
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
|
|
274
|
-
/m?(qqbrowser|
|
|
288
|
+
/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/2345 Browser
|
|
275
289
|
], [NAME, VERSION], [
|
|
276
|
-
/(
|
|
277
|
-
|
|
290
|
+
/(lbbrowser)/i, // LieBao Browser
|
|
291
|
+
/\[(linkedin)app\]/i // LinkedIn App for iOS & Android
|
|
278
292
|
], [NAME], [
|
|
279
293
|
|
|
280
294
|
// WebView
|
|
281
295
|
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
|
|
282
296
|
], [[NAME, FACEBOOK], VERSION], [
|
|
297
|
+
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
|
298
|
+
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
|
299
|
+
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
|
283
300
|
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
|
284
301
|
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
|
285
|
-
/(
|
|
302
|
+
/(alipay)client\/([\w\.]+)/i, // Alipay
|
|
303
|
+
/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i // Chromium/Instagram/Snapchat
|
|
286
304
|
], [NAME, VERSION], [
|
|
287
305
|
/\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
|
|
288
306
|
], [VERSION, [NAME, 'GSA']], [
|
|
307
|
+
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i // TikTok
|
|
308
|
+
], [VERSION, [NAME, 'TikTok']], [
|
|
289
309
|
|
|
290
310
|
/headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
|
|
291
311
|
], [VERSION, [NAME, CHROME+' Headless']], [
|
|
@@ -299,9 +319,9 @@
|
|
|
299
319
|
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
|
|
300
320
|
], [NAME, VERSION], [
|
|
301
321
|
|
|
302
|
-
/version\/([\w
|
|
322
|
+
/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i // Mobile Safari
|
|
303
323
|
], [VERSION, [NAME, 'Mobile Safari']], [
|
|
304
|
-
/version\/([\w
|
|
324
|
+
/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile
|
|
305
325
|
], [VERSION, NAME], [
|
|
306
326
|
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
|
307
327
|
], [NAME, [VERSION, strMapper, oldSafariMap]], [
|
|
@@ -326,8 +346,12 @@
|
|
|
326
346
|
// Other
|
|
327
347
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
328
348
|
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
|
|
329
|
-
/(links) \(([\w\.]+)/i
|
|
330
|
-
|
|
349
|
+
/(links) \(([\w\.]+)/i, // Links
|
|
350
|
+
/panasonic;(viera)/i // Panasonic Viera
|
|
351
|
+
], [NAME, VERSION], [
|
|
352
|
+
|
|
353
|
+
/(cobalt)\/([\w\.]+)/i // Cobalt
|
|
354
|
+
], [NAME, [VERSION, /master.|lts./, ""]]
|
|
331
355
|
],
|
|
332
356
|
|
|
333
357
|
cpu : [[
|
|
@@ -366,39 +390,46 @@
|
|
|
366
390
|
|
|
367
391
|
//////////////////////////
|
|
368
392
|
// MOBILES & TABLETS
|
|
369
|
-
// Ordered by popularity
|
|
370
393
|
/////////////////////////
|
|
371
394
|
|
|
372
395
|
// Samsung
|
|
373
|
-
/\b(sch-i[89]0\d|shw-m380s|sm-[
|
|
396
|
+
/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
|
|
374
397
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
|
|
375
|
-
/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,
|
|
398
|
+
/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
|
376
399
|
/samsung[- ]([-\w]+)/i,
|
|
377
400
|
/sec-(sgh\w+)/i
|
|
378
401
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
|
|
379
402
|
|
|
380
403
|
// Apple
|
|
381
|
-
|
|
404
|
+
/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i // iPod/iPhone
|
|
382
405
|
], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [
|
|
383
406
|
/\((ipad);[-\w\),; ]+apple/i, // iPad
|
|
384
407
|
/applecoremedia\/[\w\.]+ \((ipad)/i,
|
|
385
408
|
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
|
386
409
|
], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [
|
|
410
|
+
/(macintosh);/i
|
|
411
|
+
], [MODEL, [VENDOR, APPLE]], [
|
|
412
|
+
|
|
413
|
+
// Sharp
|
|
414
|
+
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
415
|
+
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
|
387
416
|
|
|
388
417
|
// Huawei
|
|
389
418
|
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
|
390
419
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
|
391
420
|
/(?:huawei|honor)([-\w ]+)[;\)]/i,
|
|
392
|
-
/\b(nexus 6p|\w{2,4}
|
|
421
|
+
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
|
393
422
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
|
394
423
|
|
|
395
424
|
// Xiaomi
|
|
396
|
-
/\b(poco[\w ]
|
|
425
|
+
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
|
397
426
|
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
|
398
427
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
|
399
428
|
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
|
400
|
-
|
|
429
|
+
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
|
430
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
|
|
401
431
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
|
432
|
+
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
|
|
402
433
|
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
|
403
434
|
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
|
404
435
|
|
|
@@ -413,7 +444,7 @@
|
|
|
413
444
|
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
|
414
445
|
|
|
415
446
|
// Realme
|
|
416
|
-
/\b(rmx[
|
|
447
|
+
/\b(rmx[1-3]\d{3})(?: bui|;|\))/i
|
|
417
448
|
], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
|
|
418
449
|
|
|
419
450
|
// Motorola
|
|
@@ -449,7 +480,7 @@
|
|
|
449
480
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
|
450
481
|
|
|
451
482
|
// Sony
|
|
452
|
-
/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
|
483
|
+
/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
|
453
484
|
], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [
|
|
454
485
|
/sony tablet [ps]/i,
|
|
455
486
|
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
|
@@ -462,7 +493,7 @@
|
|
|
462
493
|
|
|
463
494
|
// Amazon
|
|
464
495
|
/(alexa)webm/i,
|
|
465
|
-
/(kf[a-z]{2}wi)( bui|\))/i,
|
|
496
|
+
/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, // Kindle Fire without Silk / Echo Show
|
|
466
497
|
/(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
|
|
467
498
|
], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
|
|
468
499
|
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
|
|
@@ -488,7 +519,7 @@
|
|
|
488
519
|
|
|
489
520
|
// ZTE
|
|
490
521
|
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
|
491
|
-
/(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
522
|
+
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
492
523
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
|
493
524
|
|
|
494
525
|
// Acer
|
|
@@ -499,13 +530,13 @@
|
|
|
499
530
|
/droid.+; (m[1-5] note) bui/i,
|
|
500
531
|
/\bmz-([-\w]{2,})/i
|
|
501
532
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
|
502
|
-
|
|
503
|
-
//
|
|
504
|
-
|
|
505
|
-
], [MODEL, [VENDOR, '
|
|
533
|
+
|
|
534
|
+
// Ulefone
|
|
535
|
+
/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
|
|
536
|
+
], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [
|
|
506
537
|
|
|
507
538
|
// MIXED
|
|
508
|
-
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
|
|
539
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
|
|
509
540
|
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
|
510
541
|
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
|
511
542
|
/(asus)-?(\w+)/i, // Asus
|
|
@@ -515,6 +546,7 @@
|
|
|
515
546
|
/(oppo) ?([\w ]+) bui/i // OPPO
|
|
516
547
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
517
548
|
|
|
549
|
+
/(kobo)\s(ereader|touch)/i, // Kobo
|
|
518
550
|
/(archos) (gamepad2?)/i, // Archos
|
|
519
551
|
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
|
520
552
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
|
@@ -584,20 +616,6 @@
|
|
|
584
616
|
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
|
585
617
|
], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
|
|
586
618
|
|
|
587
|
-
///////////////////
|
|
588
|
-
// CONSOLES
|
|
589
|
-
///////////////////
|
|
590
|
-
|
|
591
|
-
/(ouya)/i, // Ouya
|
|
592
|
-
/(nintendo) ([wids3utch]+)/i // Nintendo
|
|
593
|
-
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
|
594
|
-
/droid.+; (shield) bui/i // Nvidia
|
|
595
|
-
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
|
596
|
-
/(playstation [345portablevi]+)/i // Playstation
|
|
597
|
-
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
|
598
|
-
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
|
599
|
-
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
|
|
600
|
-
|
|
601
619
|
///////////////////
|
|
602
620
|
// SMARTTVS
|
|
603
621
|
///////////////////
|
|
@@ -612,27 +630,50 @@
|
|
|
612
630
|
], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
|
|
613
631
|
/crkey/i // Google Chromecast
|
|
614
632
|
], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
|
615
|
-
/droid.+aft(\w)( bui|\))/i
|
|
633
|
+
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
|
616
634
|
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
|
617
|
-
/\(dtv[\);].+(aquos)/i
|
|
618
|
-
|
|
635
|
+
/\(dtv[\);].+(aquos)/i,
|
|
636
|
+
/(aquos-tv[\w ]+)\)/i // Sharp
|
|
637
|
+
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
|
638
|
+
/(bravia[\w ]+)( bui|\))/i // Sony
|
|
639
|
+
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
|
640
|
+
/(mitv-\w{5}) bui/i // Xiaomi
|
|
641
|
+
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
|
642
|
+
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
|
643
|
+
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
|
619
644
|
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
|
620
|
-
/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i
|
|
645
|
+
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
|
621
646
|
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
|
622
647
|
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
|
|
623
648
|
], [[TYPE, SMARTTV]], [
|
|
624
649
|
|
|
650
|
+
///////////////////
|
|
651
|
+
// CONSOLES
|
|
652
|
+
///////////////////
|
|
653
|
+
|
|
654
|
+
/(ouya)/i, // Ouya
|
|
655
|
+
/(nintendo) ([wids3utch]+)/i // Nintendo
|
|
656
|
+
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
|
657
|
+
/droid.+; (shield) bui/i // Nvidia
|
|
658
|
+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
|
659
|
+
/(playstation [345portablevi]+)/i // Playstation
|
|
660
|
+
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
|
661
|
+
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
|
662
|
+
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
|
|
663
|
+
|
|
625
664
|
///////////////////
|
|
626
665
|
// WEARABLES
|
|
627
666
|
///////////////////
|
|
628
667
|
|
|
629
668
|
/((pebble))app/i // Pebble
|
|
630
669
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
|
670
|
+
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
|
671
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
|
631
672
|
/droid.+; (glass) \d/i // Google Glass
|
|
632
673
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [
|
|
633
674
|
/droid.+; (wt63?0{2,3})\)/i
|
|
634
675
|
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
|
635
|
-
/(quest( 2)?)/i
|
|
676
|
+
/(quest( 2| pro)?)/i // Oculus Quest
|
|
636
677
|
], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [
|
|
637
678
|
|
|
638
679
|
///////////////////
|
|
@@ -641,18 +682,20 @@
|
|
|
641
682
|
|
|
642
683
|
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i // Tesla
|
|
643
684
|
], [VENDOR, [TYPE, EMBEDDED]], [
|
|
685
|
+
/(aeobc)\b/i // Echo Dot
|
|
686
|
+
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
|
644
687
|
|
|
645
688
|
////////////////////
|
|
646
689
|
// MIXED (GENERIC)
|
|
647
690
|
///////////////////
|
|
648
691
|
|
|
649
|
-
/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i
|
|
692
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors
|
|
650
693
|
], [MODEL, [TYPE, MOBILE]], [
|
|
651
694
|
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
|
652
695
|
], [MODEL, [TYPE, TABLET]], [
|
|
653
696
|
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
|
654
697
|
], [[TYPE, TABLET]], [
|
|
655
|
-
/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i
|
|
698
|
+
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
|
656
699
|
], [[TYPE, MOBILE]], [
|
|
657
700
|
/(android[-\w\. ]{0,9});.+buil/i // Generic Android Device
|
|
658
701
|
], [MODEL, [VENDOR, 'Generic']]
|
|
@@ -670,7 +713,8 @@
|
|
|
670
713
|
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
|
671
714
|
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
|
672
715
|
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
|
673
|
-
/(icab)[\/ ]([23]\.[\d\.]+)/i
|
|
716
|
+
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
|
717
|
+
/\b(libweb)/i
|
|
674
718
|
], [NAME, VERSION], [
|
|
675
719
|
|
|
676
720
|
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
|
@@ -682,23 +726,24 @@
|
|
|
682
726
|
// Windows
|
|
683
727
|
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
|
684
728
|
], [NAME, VERSION], [
|
|
685
|
-
/(windows
|
|
686
|
-
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, // Windows Phone
|
|
687
|
-
/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i
|
|
729
|
+
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
|
688
730
|
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
|
689
|
-
/
|
|
690
|
-
|
|
731
|
+
/windows nt 6\.2; (arm)/i, // Windows RT
|
|
732
|
+
/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
|
|
733
|
+
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
|
734
|
+
], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [
|
|
691
735
|
|
|
692
736
|
// iOS/macOS
|
|
693
737
|
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
|
738
|
+
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
|
694
739
|
/cfnetwork\/.+darwin/i
|
|
695
740
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
|
696
741
|
/(mac os x) ?([\w\. ]*)/i,
|
|
697
742
|
/(macintosh|mac_powerpc\b)(?!.+haiku)/i // Mac OS
|
|
698
|
-
], [[NAME,
|
|
743
|
+
], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [
|
|
699
744
|
|
|
700
745
|
// Mobile OSes
|
|
701
|
-
/droid ([\w\.]+)\b.+(android[- ]x86)/i
|
|
746
|
+
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
|
702
747
|
], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
|
|
703
748
|
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
|
|
704
749
|
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
|
@@ -714,12 +759,19 @@
|
|
|
714
759
|
/web0s;.+rt(tv)/i,
|
|
715
760
|
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS
|
|
716
761
|
], [VERSION, [NAME, 'webOS']], [
|
|
762
|
+
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
763
|
+
], [VERSION, [NAME, 'watchOS']], [
|
|
717
764
|
|
|
718
765
|
// Google Chromecast
|
|
719
766
|
/crkey\/([\d\.]+)/i // Google Chromecast
|
|
720
767
|
], [VERSION, [NAME, CHROME+'cast']], [
|
|
721
|
-
/(cros) [\w]+ ([\w\.]
|
|
722
|
-
], [[NAME,
|
|
768
|
+
/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
|
|
769
|
+
], [[NAME, CHROMIUM_OS], VERSION],[
|
|
770
|
+
|
|
771
|
+
// Smart TVs
|
|
772
|
+
/panasonic;(viera)/i, // Panasonic Viera
|
|
773
|
+
/(netrange)mmh/i, // Netrange
|
|
774
|
+
/(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
|
|
723
775
|
|
|
724
776
|
// Console
|
|
725
777
|
/(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation
|
|
@@ -740,7 +792,7 @@
|
|
|
740
792
|
], [[NAME, 'Solaris'], VERSION], [
|
|
741
793
|
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, // Solaris
|
|
742
794
|
/(aix) ((\d)(?=\.|\)| )[\w\.])*/i, // AIX
|
|
743
|
-
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,
|
|
795
|
+
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS
|
|
744
796
|
/(unix) ?([\w\.]*)/i // UNIX
|
|
745
797
|
], [NAME, VERSION]
|
|
746
798
|
]
|
|
@@ -761,15 +813,22 @@
|
|
|
761
813
|
return new UAParser(ua, extensions).getResult();
|
|
762
814
|
}
|
|
763
815
|
|
|
764
|
-
var
|
|
816
|
+
var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;
|
|
817
|
+
var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);
|
|
818
|
+
var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;
|
|
765
819
|
var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
|
|
820
|
+
var _isSelfNav = _navigator && _navigator.userAgent == _ua;
|
|
766
821
|
|
|
767
822
|
this.getBrowser = function () {
|
|
768
823
|
var _browser = {};
|
|
769
824
|
_browser[NAME] = undefined;
|
|
770
825
|
_browser[VERSION] = undefined;
|
|
771
826
|
rgxMapper.call(_browser, _ua, _rgxmap.browser);
|
|
772
|
-
_browser
|
|
827
|
+
_browser[MAJOR] = majorize(_browser[VERSION]);
|
|
828
|
+
// Brave-specific detection
|
|
829
|
+
if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {
|
|
830
|
+
_browser[NAME] = 'Brave';
|
|
831
|
+
}
|
|
773
832
|
return _browser;
|
|
774
833
|
};
|
|
775
834
|
this.getCPU = function () {
|
|
@@ -784,6 +843,14 @@
|
|
|
784
843
|
_device[MODEL] = undefined;
|
|
785
844
|
_device[TYPE] = undefined;
|
|
786
845
|
rgxMapper.call(_device, _ua, _rgxmap.device);
|
|
846
|
+
if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {
|
|
847
|
+
_device[TYPE] = MOBILE;
|
|
848
|
+
}
|
|
849
|
+
// iPadOS-specific detection: identified as Mac, but has some iOS-only properties
|
|
850
|
+
if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {
|
|
851
|
+
_device[MODEL] = 'iPad';
|
|
852
|
+
_device[TYPE] = TABLET;
|
|
853
|
+
}
|
|
787
854
|
return _device;
|
|
788
855
|
};
|
|
789
856
|
this.getEngine = function () {
|
|
@@ -798,6 +865,11 @@
|
|
|
798
865
|
_os[NAME] = undefined;
|
|
799
866
|
_os[VERSION] = undefined;
|
|
800
867
|
rgxMapper.call(_os, _ua, _rgxmap.os);
|
|
868
|
+
if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {
|
|
869
|
+
_os[NAME] = _uach.platform
|
|
870
|
+
.replace(/chrome os/i, CHROMIUM_OS)
|
|
871
|
+
.replace(/macos/i, MAC_OS); // backward compatibility
|
|
872
|
+
}
|
|
801
873
|
return _os;
|
|
802
874
|
};
|
|
803
875
|
this.getResult = function () {
|
package/.github/FUNDING.yml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# These are supported funding model platforms
|
|
2
|
-
|
|
3
|
-
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
|
4
|
-
patreon: # Replace with a single Patreon username
|
|
5
|
-
open_collective: ua-parser-js
|
|
6
|
-
ko_fi: # Replace with a single Ko-fi username
|
|
7
|
-
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
8
|
-
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
9
|
-
liberapay: # Replace with a single Liberapay username
|
|
10
|
-
issuehunt: # Replace with a single IssueHunt username
|
|
11
|
-
otechie: # Replace with a single Otechie username
|
|
12
|
-
custom: ['https://www.paypal.me/faisalman/']
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
name: ua-parser-js-run-test
|
|
2
|
-
|
|
3
|
-
on: [push, pull_request]
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
run-test:
|
|
7
|
-
runs-on: ubuntu-latest
|
|
8
|
-
strategy:
|
|
9
|
-
matrix:
|
|
10
|
-
arch: [amd64, ppc64le]
|
|
11
|
-
steps:
|
|
12
|
-
- uses: actions/checkout@v2
|
|
13
|
-
- uses: actions/setup-node@v2
|
|
14
|
-
- name: Run the test
|
|
15
|
-
run: |
|
|
16
|
-
npm install
|
|
17
|
-
npm run test-ci
|
package/.jshintrc
DELETED
package/.travis.yml
DELETED
package/bower.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ua-parser-js",
|
|
3
|
-
"version": "1.0.2",
|
|
4
|
-
"authors": [
|
|
5
|
-
"Faisal Salman <f@faisalman.com>"
|
|
6
|
-
],
|
|
7
|
-
"private": false,
|
|
8
|
-
"main": "src/ua-parser.js",
|
|
9
|
-
"ignore": [
|
|
10
|
-
"build",
|
|
11
|
-
"node_modules",
|
|
12
|
-
"bower_components",
|
|
13
|
-
"test",
|
|
14
|
-
"tests"
|
|
15
|
-
],
|
|
16
|
-
"dependencies": {}
|
|
17
|
-
}
|
package/changelog.md
DELETED
package/package.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
Package.describe({
|
|
2
|
-
name: 'faisalman:ua-parser-js',
|
|
3
|
-
version: '1.0.2',
|
|
4
|
-
summary: 'Lightweight JavaScript-based user-agent string parser',
|
|
5
|
-
git: 'https://github.com/faisalman/ua-parser-js.git',
|
|
6
|
-
documentation: 'readme.md'
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
Package.onUse(function (api) {
|
|
10
|
-
api.addFiles("src/ua-parser.js");
|
|
11
|
-
api.export("UAParser");
|
|
12
|
-
});
|