ua-parser-js 1.0.2 → 1.0.35
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 +5 -1
- package/readme.md +102 -29
- package/src/ua-parser.js +113 -55
- 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.35
|
|
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.35',
|
|
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 = 350;
|
|
41
41
|
|
|
42
42
|
var AMAZON = 'Amazon',
|
|
43
43
|
APPLE = 'Apple',
|
|
@@ -54,10 +54,14 @@
|
|
|
54
54
|
MOTOROLA = 'Motorola',
|
|
55
55
|
OPERA = 'Opera',
|
|
56
56
|
SAMSUNG = 'Samsung',
|
|
57
|
+
SHARP = 'Sharp',
|
|
57
58
|
SONY = 'Sony',
|
|
59
|
+
VIERA = 'Viera',
|
|
58
60
|
XIAOMI = 'Xiaomi',
|
|
59
61
|
ZEBRA = 'Zebra',
|
|
60
|
-
FACEBOOK
|
|
62
|
+
FACEBOOK = 'Facebook',
|
|
63
|
+
CHROMIUM_OS = 'Chromium OS',
|
|
64
|
+
MAC_OS = 'Mac OS';
|
|
61
65
|
|
|
62
66
|
///////////
|
|
63
67
|
// Helper
|
|
@@ -92,7 +96,7 @@
|
|
|
92
96
|
},
|
|
93
97
|
trim = function (str, len) {
|
|
94
98
|
if (typeof(str) === STR_TYPE) {
|
|
95
|
-
str = str.replace(/^\s\s*/, EMPTY)
|
|
99
|
+
str = str.replace(/^\s\s*/, EMPTY);
|
|
96
100
|
return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
|
97
101
|
}
|
|
98
102
|
};
|
|
@@ -115,6 +119,7 @@
|
|
|
115
119
|
// try matching uastring with regexes
|
|
116
120
|
while (j < regex.length && !matches) {
|
|
117
121
|
|
|
122
|
+
if (!regex[j]) { break; }
|
|
118
123
|
matches = regex[j++].exec(ua);
|
|
119
124
|
|
|
120
125
|
if (!!matches) {
|
|
@@ -231,13 +236,15 @@
|
|
|
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
|
-
|
|
246
|
+
/microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
|
|
247
|
+
/\bqbcore\/([\w\.]+).+microm/i
|
|
241
248
|
], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
|
|
242
249
|
/micromessenger\/([\w\.]+)/i // WeChat
|
|
243
250
|
], [VERSION, [NAME, 'WeChat']], [
|
|
@@ -245,7 +252,7 @@
|
|
|
245
252
|
], [VERSION, [NAME, 'Konqueror']], [
|
|
246
253
|
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i // IE11
|
|
247
254
|
], [VERSION, [NAME, 'IE']], [
|
|
248
|
-
/
|
|
255
|
+
/ya(?:search)?browser\/([\w\.]+)/i // Yandex
|
|
249
256
|
], [VERSION, [NAME, 'Yandex']], [
|
|
250
257
|
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
|
|
251
258
|
], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [
|
|
@@ -265,8 +272,8 @@
|
|
|
265
272
|
], [VERSION, [NAME, FIREFOX]], [
|
|
266
273
|
/\bqihu|(qi?ho?o?|360)browser/i // 360
|
|
267
274
|
], [[NAME, '360 '+BROWSER]], [
|
|
268
|
-
/(oculus|samsung|sailfish)browser\/([\w\.]+)/i
|
|
269
|
-
], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser
|
|
275
|
+
/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i
|
|
276
|
+
], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish/Huawei Browser
|
|
270
277
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
|
271
278
|
], [[NAME, /_/g, ' '], VERSION], [
|
|
272
279
|
/(electron)\/([\w\.]+) safari/i, // Electron-based App
|
|
@@ -274,18 +281,23 @@
|
|
|
274
281
|
/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/Baidu App/2345 Browser
|
|
275
282
|
], [NAME, VERSION], [
|
|
276
283
|
/(metasr)[\/ ]?([\w\.]+)/i, // SouGouBrowser
|
|
277
|
-
/(lbbrowser)/i
|
|
284
|
+
/(lbbrowser)/i, // LieBao Browser
|
|
285
|
+
/\[(linkedin)app\]/i // LinkedIn App for iOS & Android
|
|
278
286
|
], [NAME], [
|
|
279
287
|
|
|
280
288
|
// WebView
|
|
281
289
|
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
|
|
282
290
|
], [[NAME, FACEBOOK], VERSION], [
|
|
291
|
+
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
|
292
|
+
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
|
283
293
|
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
|
284
294
|
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
|
285
295
|
/(chromium|instagram)[\/ ]([-\w\.]+)/i // Chromium/Instagram
|
|
286
296
|
], [NAME, VERSION], [
|
|
287
297
|
/\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
|
|
288
298
|
], [VERSION, [NAME, 'GSA']], [
|
|
299
|
+
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i // TikTok
|
|
300
|
+
], [VERSION, [NAME, 'TikTok']], [
|
|
289
301
|
|
|
290
302
|
/headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
|
|
291
303
|
], [VERSION, [NAME, CHROME+' Headless']], [
|
|
@@ -299,9 +311,9 @@
|
|
|
299
311
|
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
|
|
300
312
|
], [NAME, VERSION], [
|
|
301
313
|
|
|
302
|
-
/version\/([\w
|
|
314
|
+
/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i // Mobile Safari
|
|
303
315
|
], [VERSION, [NAME, 'Mobile Safari']], [
|
|
304
|
-
/version\/([\w
|
|
316
|
+
/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile
|
|
305
317
|
], [VERSION, NAME], [
|
|
306
318
|
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
|
307
319
|
], [NAME, [VERSION, strMapper, oldSafariMap]], [
|
|
@@ -326,8 +338,12 @@
|
|
|
326
338
|
// Other
|
|
327
339
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
328
340
|
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
|
|
329
|
-
/(links) \(([\w\.]+)/i
|
|
330
|
-
|
|
341
|
+
/(links) \(([\w\.]+)/i, // Links
|
|
342
|
+
/panasonic;(viera)/i // Panasonic Viera
|
|
343
|
+
], [NAME, VERSION], [
|
|
344
|
+
|
|
345
|
+
/(cobalt)\/([\w\.]+)/i // Cobalt
|
|
346
|
+
], [NAME, [VERSION, /master.|lts./, ""]]
|
|
331
347
|
],
|
|
332
348
|
|
|
333
349
|
cpu : [[
|
|
@@ -366,30 +382,35 @@
|
|
|
366
382
|
|
|
367
383
|
//////////////////////////
|
|
368
384
|
// MOBILES & TABLETS
|
|
369
|
-
// Ordered by popularity
|
|
370
385
|
/////////////////////////
|
|
371
386
|
|
|
372
387
|
// Samsung
|
|
373
|
-
/\b(sch-i[89]0\d|shw-m380s|sm-[
|
|
388
|
+
/\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
389
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
|
|
375
|
-
/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,
|
|
390
|
+
/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
|
376
391
|
/samsung[- ]([-\w]+)/i,
|
|
377
392
|
/sec-(sgh\w+)/i
|
|
378
393
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
|
|
379
394
|
|
|
380
395
|
// Apple
|
|
381
|
-
|
|
396
|
+
/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i // iPod/iPhone
|
|
382
397
|
], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [
|
|
383
398
|
/\((ipad);[-\w\),; ]+apple/i, // iPad
|
|
384
399
|
/applecoremedia\/[\w\.]+ \((ipad)/i,
|
|
385
400
|
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
|
386
401
|
], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [
|
|
402
|
+
/(macintosh);/i
|
|
403
|
+
], [MODEL, [VENDOR, APPLE]], [
|
|
404
|
+
|
|
405
|
+
// Sharp
|
|
406
|
+
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
407
|
+
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
|
387
408
|
|
|
388
409
|
// Huawei
|
|
389
410
|
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
|
390
411
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
|
391
412
|
/(?:huawei|honor)([-\w ]+)[;\)]/i,
|
|
392
|
-
/\b(nexus 6p|\w{2,4}
|
|
413
|
+
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
|
393
414
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
|
394
415
|
|
|
395
416
|
// Xiaomi
|
|
@@ -397,7 +418,7 @@
|
|
|
397
418
|
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
|
398
419
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
|
399
420
|
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
|
400
|
-
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
|
|
421
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
|
|
401
422
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
|
402
423
|
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
|
403
424
|
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
|
@@ -449,7 +470,7 @@
|
|
|
449
470
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
|
450
471
|
|
|
451
472
|
// Sony
|
|
452
|
-
/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
|
473
|
+
/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
474
|
], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [
|
|
454
475
|
/sony tablet [ps]/i,
|
|
455
476
|
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
|
@@ -462,7 +483,7 @@
|
|
|
462
483
|
|
|
463
484
|
// Amazon
|
|
464
485
|
/(alexa)webm/i,
|
|
465
|
-
/(kf[a-z]{2}wi)( bui|\))/i,
|
|
486
|
+
/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, // Kindle Fire without Silk / Echo Show
|
|
466
487
|
/(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
|
|
467
488
|
], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
|
|
468
489
|
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
|
|
@@ -488,7 +509,7 @@
|
|
|
488
509
|
|
|
489
510
|
// ZTE
|
|
490
511
|
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
|
491
|
-
/(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
512
|
+
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
492
513
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
|
493
514
|
|
|
494
515
|
// Acer
|
|
@@ -500,10 +521,6 @@
|
|
|
500
521
|
/\bmz-([-\w]{2,})/i
|
|
501
522
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
|
502
523
|
|
|
503
|
-
// Sharp
|
|
504
|
-
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
505
|
-
], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [
|
|
506
|
-
|
|
507
524
|
// MIXED
|
|
508
525
|
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
|
|
509
526
|
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
|
@@ -515,6 +532,7 @@
|
|
|
515
532
|
/(oppo) ?([\w ]+) bui/i // OPPO
|
|
516
533
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
517
534
|
|
|
535
|
+
/(kobo)\s(ereader|touch)/i, // Kobo
|
|
518
536
|
/(archos) (gamepad2?)/i, // Archos
|
|
519
537
|
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
|
520
538
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
|
@@ -584,20 +602,6 @@
|
|
|
584
602
|
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
|
585
603
|
], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
|
|
586
604
|
|
|
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
605
|
///////////////////
|
|
602
606
|
// SMARTTVS
|
|
603
607
|
///////////////////
|
|
@@ -614,25 +618,48 @@
|
|
|
614
618
|
], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
|
615
619
|
/droid.+aft(\w)( bui|\))/i // Fire TV
|
|
616
620
|
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
|
617
|
-
/\(dtv[\);].+(aquos)/i
|
|
618
|
-
|
|
621
|
+
/\(dtv[\);].+(aquos)/i,
|
|
622
|
+
/(aquos-tv[\w ]+)\)/i // Sharp
|
|
623
|
+
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
|
624
|
+
/(bravia[\w ]+)( bui|\))/i // Sony
|
|
625
|
+
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
|
626
|
+
/(mitv-\w{5}) bui/i // Xiaomi
|
|
627
|
+
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
|
628
|
+
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
|
629
|
+
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
|
619
630
|
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
|
620
|
-
/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i
|
|
631
|
+
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
|
621
632
|
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
|
622
633
|
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
|
|
623
634
|
], [[TYPE, SMARTTV]], [
|
|
624
635
|
|
|
636
|
+
///////////////////
|
|
637
|
+
// CONSOLES
|
|
638
|
+
///////////////////
|
|
639
|
+
|
|
640
|
+
/(ouya)/i, // Ouya
|
|
641
|
+
/(nintendo) ([wids3utch]+)/i // Nintendo
|
|
642
|
+
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
|
643
|
+
/droid.+; (shield) bui/i // Nvidia
|
|
644
|
+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
|
645
|
+
/(playstation [345portablevi]+)/i // Playstation
|
|
646
|
+
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
|
647
|
+
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
|
648
|
+
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
|
|
649
|
+
|
|
625
650
|
///////////////////
|
|
626
651
|
// WEARABLES
|
|
627
652
|
///////////////////
|
|
628
653
|
|
|
629
654
|
/((pebble))app/i // Pebble
|
|
630
655
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
|
656
|
+
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
|
657
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
|
631
658
|
/droid.+; (glass) \d/i // Google Glass
|
|
632
659
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [
|
|
633
660
|
/droid.+; (wt63?0{2,3})\)/i
|
|
634
661
|
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
|
635
|
-
/(quest( 2)?)/i
|
|
662
|
+
/(quest( 2| pro)?)/i // Oculus Quest
|
|
636
663
|
], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [
|
|
637
664
|
|
|
638
665
|
///////////////////
|
|
@@ -641,6 +668,8 @@
|
|
|
641
668
|
|
|
642
669
|
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i // Tesla
|
|
643
670
|
], [VENDOR, [TYPE, EMBEDDED]], [
|
|
671
|
+
/(aeobc)\b/i // Echo Dot
|
|
672
|
+
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
|
644
673
|
|
|
645
674
|
////////////////////
|
|
646
675
|
// MIXED (GENERIC)
|
|
@@ -652,7 +681,7 @@
|
|
|
652
681
|
], [MODEL, [TYPE, TABLET]], [
|
|
653
682
|
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
|
654
683
|
], [[TYPE, TABLET]], [
|
|
655
|
-
/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i
|
|
684
|
+
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
|
656
685
|
], [[TYPE, MOBILE]], [
|
|
657
686
|
/(android[-\w\. ]{0,9});.+buil/i // Generic Android Device
|
|
658
687
|
], [MODEL, [VENDOR, 'Generic']]
|
|
@@ -670,7 +699,8 @@
|
|
|
670
699
|
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
|
671
700
|
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
|
672
701
|
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
|
673
|
-
/(icab)[\/ ]([23]\.[\d\.]+)/i
|
|
702
|
+
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
|
703
|
+
/\b(libweb)/i
|
|
674
704
|
], [NAME, VERSION], [
|
|
675
705
|
|
|
676
706
|
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
|
@@ -691,14 +721,15 @@
|
|
|
691
721
|
|
|
692
722
|
// iOS/macOS
|
|
693
723
|
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
|
724
|
+
/ios;fbsv\/([\d\.]+)/i,
|
|
694
725
|
/cfnetwork\/.+darwin/i
|
|
695
726
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
|
696
727
|
/(mac os x) ?([\w\. ]*)/i,
|
|
697
728
|
/(macintosh|mac_powerpc\b)(?!.+haiku)/i // Mac OS
|
|
698
|
-
], [[NAME,
|
|
729
|
+
], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [
|
|
699
730
|
|
|
700
731
|
// Mobile OSes
|
|
701
|
-
/droid ([\w\.]+)\b.+(android[- ]x86)/i
|
|
732
|
+
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
|
702
733
|
], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
|
|
703
734
|
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
|
|
704
735
|
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
|
@@ -714,12 +745,19 @@
|
|
|
714
745
|
/web0s;.+rt(tv)/i,
|
|
715
746
|
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS
|
|
716
747
|
], [VERSION, [NAME, 'webOS']], [
|
|
748
|
+
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
749
|
+
], [VERSION, [NAME, 'watchOS']], [
|
|
717
750
|
|
|
718
751
|
// Google Chromecast
|
|
719
752
|
/crkey\/([\d\.]+)/i // Google Chromecast
|
|
720
753
|
], [VERSION, [NAME, CHROME+'cast']], [
|
|
721
|
-
/(cros) [\w]+ ([\w\.]
|
|
722
|
-
], [[NAME,
|
|
754
|
+
/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
|
|
755
|
+
], [[NAME, CHROMIUM_OS], VERSION],[
|
|
756
|
+
|
|
757
|
+
// Smart TVs
|
|
758
|
+
/panasonic;(viera)/i, // Panasonic Viera
|
|
759
|
+
/(netrange)mmh/i, // Netrange
|
|
760
|
+
/(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
|
|
723
761
|
|
|
724
762
|
// Console
|
|
725
763
|
/(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation
|
|
@@ -740,7 +778,7 @@
|
|
|
740
778
|
], [[NAME, 'Solaris'], VERSION], [
|
|
741
779
|
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, // Solaris
|
|
742
780
|
/(aix) ((\d)(?=\.|\)| )[\w\.])*/i, // AIX
|
|
743
|
-
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,
|
|
781
|
+
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS
|
|
744
782
|
/(unix) ?([\w\.]*)/i // UNIX
|
|
745
783
|
], [NAME, VERSION]
|
|
746
784
|
]
|
|
@@ -761,15 +799,22 @@
|
|
|
761
799
|
return new UAParser(ua, extensions).getResult();
|
|
762
800
|
}
|
|
763
801
|
|
|
764
|
-
var
|
|
802
|
+
var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;
|
|
803
|
+
var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);
|
|
804
|
+
var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;
|
|
765
805
|
var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
|
|
806
|
+
var _isSelfNav = _navigator && _navigator.userAgent == _ua;
|
|
766
807
|
|
|
767
808
|
this.getBrowser = function () {
|
|
768
809
|
var _browser = {};
|
|
769
810
|
_browser[NAME] = undefined;
|
|
770
811
|
_browser[VERSION] = undefined;
|
|
771
812
|
rgxMapper.call(_browser, _ua, _rgxmap.browser);
|
|
772
|
-
_browser
|
|
813
|
+
_browser[MAJOR] = majorize(_browser[VERSION]);
|
|
814
|
+
// Brave-specific detection
|
|
815
|
+
if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {
|
|
816
|
+
_browser[NAME] = 'Brave';
|
|
817
|
+
}
|
|
773
818
|
return _browser;
|
|
774
819
|
};
|
|
775
820
|
this.getCPU = function () {
|
|
@@ -784,6 +829,14 @@
|
|
|
784
829
|
_device[MODEL] = undefined;
|
|
785
830
|
_device[TYPE] = undefined;
|
|
786
831
|
rgxMapper.call(_device, _ua, _rgxmap.device);
|
|
832
|
+
if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {
|
|
833
|
+
_device[TYPE] = MOBILE;
|
|
834
|
+
}
|
|
835
|
+
// iPadOS-specific detection: identified as Mac, but has some iOS-only properties
|
|
836
|
+
if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {
|
|
837
|
+
_device[MODEL] = 'iPad';
|
|
838
|
+
_device[TYPE] = TABLET;
|
|
839
|
+
}
|
|
787
840
|
return _device;
|
|
788
841
|
};
|
|
789
842
|
this.getEngine = function () {
|
|
@@ -798,6 +851,11 @@
|
|
|
798
851
|
_os[NAME] = undefined;
|
|
799
852
|
_os[VERSION] = undefined;
|
|
800
853
|
rgxMapper.call(_os, _ua, _rgxmap.os);
|
|
854
|
+
if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {
|
|
855
|
+
_os[NAME] = _uach.platform
|
|
856
|
+
.replace(/chrome os/i, CHROMIUM_OS)
|
|
857
|
+
.replace(/macos/i, MAC_OS); // backward compatibility
|
|
858
|
+
}
|
|
801
859
|
return _os;
|
|
802
860
|
};
|
|
803
861
|
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
|
-
});
|