ua-parser-js 0.7.14 → 0.7.18
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.
Potentially problematic release.
This version of ua-parser-js might be problematic. Click here for more details.
- package/bower.json +1 -1
- package/dist/ua-parser.min.js +4 -4
- package/dist/ua-parser.pack.js +4 -4
- package/package.js +1 -1
- package/package.json +22 -5
- package/readme.md +23 -4
- package/src/ua-parser.js +125 -69
- package/test/browser-test.json +106 -10
- package/test/device-test.json +623 -695
- package/test/test.js +15 -0
- package/.npmignore +0 -24
package/src/ua-parser.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
2
|
-
* UAParser.js v0.7.
|
1
|
+
/*!
|
2
|
+
* UAParser.js v0.7.18
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
6
6
|
* Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>
|
7
|
-
* Dual licensed under GPLv2
|
7
|
+
* Dual licensed under GPLv2 or MIT
|
8
8
|
*/
|
9
9
|
|
10
10
|
(function (window, undefined) {
|
@@ -16,7 +16,7 @@
|
|
16
16
|
/////////////
|
17
17
|
|
18
18
|
|
19
|
-
var LIBVERSION = '0.7.
|
19
|
+
var LIBVERSION = '0.7.18',
|
20
20
|
EMPTY = '',
|
21
21
|
UNKNOWN = '?',
|
22
22
|
FUNC_TYPE = 'function',
|
@@ -138,7 +138,7 @@
|
|
138
138
|
}
|
139
139
|
i += 2;
|
140
140
|
}
|
141
|
-
//console.log(this);
|
141
|
+
// console.log(this);
|
142
142
|
//return this;
|
143
143
|
},
|
144
144
|
|
@@ -244,7 +244,7 @@
|
|
244
244
|
|
245
245
|
// Mixed
|
246
246
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
247
|
-
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]
|
247
|
+
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,
|
248
248
|
// Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
249
249
|
|
250
250
|
// Trident based
|
@@ -253,16 +253,16 @@
|
|
253
253
|
/(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer
|
254
254
|
|
255
255
|
// Webkit/KHTML based
|
256
|
-
/(rekonq)\/([\w\.]
|
257
|
-
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\/([\w\.-]+)/i
|
256
|
+
/(rekonq)\/([\w\.]*)/i, // Rekonq
|
257
|
+
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark)\/([\w\.-]+)/i
|
258
258
|
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser
|
259
259
|
], [NAME, VERSION], [
|
260
260
|
|
261
261
|
/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
|
262
262
|
], [[NAME, 'IE'], VERSION], [
|
263
263
|
|
264
|
-
/(edge)\/((\d+)?[\w\.]+)/i
|
265
|
-
], [NAME, VERSION], [
|
264
|
+
/(edge|edgios|edgea)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
265
|
+
], [[NAME, 'Edge'], VERSION], [
|
266
266
|
|
267
267
|
/(yabrowser)\/([\w\.]+)/i // Yandex
|
268
268
|
], [[NAME, 'Yandex'], VERSION], [
|
@@ -280,19 +280,34 @@
|
|
280
280
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
281
281
|
], [[NAME, 'WeChat'], VERSION], [
|
282
282
|
|
283
|
+
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
|
284
|
+
], [NAME, VERSION], [
|
285
|
+
|
283
286
|
/(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
|
284
287
|
], [NAME, VERSION], [
|
285
288
|
|
286
289
|
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
287
290
|
], [NAME, VERSION], [
|
288
291
|
|
292
|
+
/(BIDUBrowser)[\/\s]?([\w\.]+)/i // Baidu Browser
|
293
|
+
], [NAME, VERSION], [
|
294
|
+
|
295
|
+
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
|
296
|
+
], [NAME, VERSION], [
|
297
|
+
|
298
|
+
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
299
|
+
], [NAME], [
|
300
|
+
|
301
|
+
/(LBBROWSER)/i // LieBao Browser
|
302
|
+
], [NAME], [
|
303
|
+
|
289
304
|
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
290
305
|
], [VERSION, [NAME, 'MIUI Browser']], [
|
291
306
|
|
292
307
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
293
308
|
], [VERSION, [NAME, 'Facebook']], [
|
294
309
|
|
295
|
-
/
|
310
|
+
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
296
311
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
297
312
|
|
298
313
|
/\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
@@ -326,6 +341,9 @@
|
|
326
341
|
/version\/([\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile
|
327
342
|
], [VERSION, NAME], [
|
328
343
|
|
344
|
+
/webkit.+?(gsa)\/([\w\.]+).+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
|
345
|
+
], [[NAME, 'GSA'], VERSION], [
|
346
|
+
|
329
347
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
330
348
|
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
331
349
|
|
@@ -339,7 +357,8 @@
|
|
339
357
|
/(swiftfox)/i, // Swiftfox
|
340
358
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
|
341
359
|
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
342
|
-
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)
|
360
|
+
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
361
|
+
|
343
362
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
344
363
|
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
|
345
364
|
|
@@ -347,7 +366,7 @@
|
|
347
366
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
|
348
367
|
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
|
349
368
|
/(links)\s\(([\w\.]+)/i, // Links
|
350
|
-
/(gobrowser)\/?([\w\.]
|
369
|
+
/(gobrowser)\/?([\w\.]*)/i, // GoBrowser
|
351
370
|
/(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
|
352
371
|
/(mosaic)[\/\s]([\w\.]+)/i // Mosaic
|
353
372
|
], [NAME, VERSION]
|
@@ -509,9 +528,9 @@
|
|
509
528
|
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
|
510
529
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
511
530
|
|
512
|
-
/(kf[A-z]+)\sbuild
|
531
|
+
/(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
|
513
532
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
514
|
-
/(sd|kf)[0349hijorstuw]+\sbuild
|
533
|
+
/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i // Fire Phone
|
515
534
|
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
516
535
|
|
517
536
|
/\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
|
@@ -520,7 +539,7 @@
|
|
520
539
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
521
540
|
|
522
541
|
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
523
|
-
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]
|
542
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
|
524
543
|
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
525
544
|
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
|
526
545
|
/(asus)-?(\w+)/i // Asus
|
@@ -554,8 +573,8 @@
|
|
554
573
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
555
574
|
|
556
575
|
/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, // HTC
|
557
|
-
/(zte)-(\w
|
558
|
-
/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]
|
576
|
+
/(zte)-(\w*)/i, // ZTE
|
577
|
+
/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
559
578
|
// Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony
|
560
579
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
561
580
|
|
@@ -575,8 +594,8 @@
|
|
575
594
|
], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
|
576
595
|
|
577
596
|
// Motorola
|
578
|
-
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))
|
579
|
-
/mot[\s-]?(\w
|
597
|
+
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
598
|
+
/mot[\s-]?(\w*)/i,
|
580
599
|
/(XT\d{3,4}) build\//i,
|
581
600
|
/(nexus\s6)/i
|
582
601
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
@@ -598,15 +617,15 @@
|
|
598
617
|
/smart-tv.+(samsung)/i
|
599
618
|
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
600
619
|
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
601
|
-
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)
|
620
|
+
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i,
|
602
621
|
/sec-((sgh\w+))/i
|
603
622
|
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
604
623
|
|
605
|
-
/sie-(\w
|
624
|
+
/sie-(\w*)/i // Siemens
|
606
625
|
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
607
626
|
|
608
627
|
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
609
|
-
/(nokia)[\s_-]?([\w-]
|
628
|
+
/(nokia)[\s_-]?([\w-]*)/i
|
610
629
|
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
611
630
|
|
612
631
|
/android\s3\.[\s\w;-]{10}(a\d{3})/i // Acer
|
@@ -619,7 +638,7 @@
|
|
619
638
|
/(lg) netcast\.tv/i // LG SmartTV
|
620
639
|
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
621
640
|
/(nexus\s[45])/i, // LG
|
622
|
-
/lg[e;\s\/-]+(\w
|
641
|
+
/lg[e;\s\/-]+(\w*)/i,
|
623
642
|
/android.+lg(\-?[\d\w]+)\s+build/i
|
624
643
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
625
644
|
|
@@ -647,21 +666,24 @@
|
|
647
666
|
/android.+;\s(pixel xl|pixel)\s/i // Google Pixel
|
648
667
|
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
649
668
|
|
650
|
-
/android
|
669
|
+
/android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
651
670
|
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
652
|
-
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d
|
671
|
+
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i, // Xiaomi Mi
|
672
|
+
/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i // Redmi Phones
|
653
673
|
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
654
|
-
|
674
|
+
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i // Mi Pad tablets
|
675
|
+
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
655
676
|
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu Tablet
|
656
677
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [
|
657
678
|
|
658
|
-
/android.+a000(1)\s+build/i
|
679
|
+
/android.+a000(1)\s+build/i, // OnePlus
|
680
|
+
/android.+oneplus\s(a\d{4})\s+build/i
|
659
681
|
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
660
682
|
|
661
683
|
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
662
684
|
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
663
685
|
|
664
|
-
/android.+[
|
686
|
+
/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i // Dell Venue Tablets
|
665
687
|
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
666
688
|
|
667
689
|
/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
@@ -673,8 +695,8 @@
|
|
673
695
|
/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
674
696
|
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
675
697
|
|
676
|
-
/android
|
677
|
-
], [[VENDOR, 'ZTE'],
|
698
|
+
/android.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
699
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
678
700
|
|
679
701
|
/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
680
702
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
@@ -685,26 +707,26 @@
|
|
685
707
|
/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
686
708
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
687
709
|
|
688
|
-
/(android).+[;\/]\s+([YR]\d{2}
|
689
|
-
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(
|
710
|
+
/(android).+[;\/]\s+([YR]\d{2})\s+build/i,
|
711
|
+
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
690
712
|
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
691
713
|
|
692
|
-
/android.+[;\/]\s*(NS
|
714
|
+
/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
693
715
|
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
694
716
|
|
695
|
-
/android.+[;\/]\s*((NX|Next)
|
717
|
+
/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
696
718
|
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
697
719
|
|
698
|
-
/android.+[;\/]\s*(Xtreme\_
|
720
|
+
/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
699
721
|
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
700
722
|
|
701
|
-
/android.+[;\/]\s*(LVTEL
|
723
|
+
/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
702
724
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
703
725
|
|
704
726
|
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
705
727
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
706
728
|
|
707
|
-
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(
|
729
|
+
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i // Le Pan Tablets
|
708
730
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
709
731
|
|
710
732
|
/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i // MachSpeed Tablets
|
@@ -719,14 +741,14 @@
|
|
719
741
|
/android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
|
720
742
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
721
743
|
|
722
|
-
/android.+(Gigaset)[\s\-]+(Q
|
744
|
+
/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i // Gigaset Tablets
|
723
745
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
724
746
|
|
725
747
|
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
726
748
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
727
749
|
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
728
750
|
|
729
|
-
/(android
|
751
|
+
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
730
752
|
], [MODEL, [VENDOR, 'Generic']]
|
731
753
|
|
732
754
|
|
@@ -793,7 +815,7 @@
|
|
793
815
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
794
816
|
], [NAME, VERSION], [
|
795
817
|
|
796
|
-
/rv\:([\w\.]
|
818
|
+
/rv\:([\w\.]{1,9}).+(gecko)/i // Gecko
|
797
819
|
], [VERSION, NAME]
|
798
820
|
],
|
799
821
|
|
@@ -803,7 +825,7 @@
|
|
803
825
|
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
804
826
|
], [NAME, VERSION], [
|
805
827
|
/(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
|
806
|
-
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]
|
828
|
+
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone
|
807
829
|
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
|
808
830
|
], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
|
809
831
|
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
|
@@ -812,13 +834,13 @@
|
|
812
834
|
// Mobile/Embedded OS
|
813
835
|
/\((bb)(10);/i // BlackBerry 10
|
814
836
|
], [[NAME, 'BlackBerry'], VERSION], [
|
815
|
-
/(blackberry)\w*\/?([\w\.]
|
837
|
+
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
|
816
838
|
/(tizen)[\/\s]([\w\.]+)/i, // Tizen
|
817
|
-
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]
|
839
|
+
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]*)/i,
|
818
840
|
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
|
819
841
|
/linux;.+(sailfish);/i // Sailfish OS
|
820
842
|
], [NAME, VERSION], [
|
821
|
-
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]
|
843
|
+
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
822
844
|
], [[NAME, 'Symbian'], VERSION], [
|
823
845
|
/\((series40);/i // Series 40
|
824
846
|
], [NAME], [
|
@@ -829,43 +851,43 @@
|
|
829
851
|
/(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation
|
830
852
|
|
831
853
|
// GNU/Linux based
|
832
|
-
/(mint)[\/\s\(]?(\w
|
854
|
+
/(mint)[\/\s\(]?(\w*)/i, // Mint
|
833
855
|
/(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
|
834
|
-
/(joli|[kxln]?ubuntu|debian|
|
856
|
+
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i,
|
835
857
|
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
|
836
858
|
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
|
837
|
-
/(hurd|linux)\s?([\w\.]
|
838
|
-
/(gnu)\s?([\w\.]
|
859
|
+
/(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
|
860
|
+
/(gnu)\s?([\w\.]*)/i // GNU
|
839
861
|
], [NAME, VERSION], [
|
840
862
|
|
841
863
|
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
842
864
|
], [[NAME, 'Chromium OS'], VERSION],[
|
843
865
|
|
844
866
|
// Solaris
|
845
|
-
/(sunos)\s?([\w
|
867
|
+
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
846
868
|
], [[NAME, 'Solaris'], VERSION], [
|
847
869
|
|
848
870
|
// BSD based
|
849
|
-
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]
|
871
|
+
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
850
872
|
], [NAME, VERSION],[
|
851
873
|
|
852
|
-
/(haiku)\s(\w+)/i
|
874
|
+
/(haiku)\s(\w+)/i // Haiku
|
853
875
|
], [NAME, VERSION],[
|
854
876
|
|
855
877
|
/cfnetwork\/.+darwin/i,
|
856
|
-
/ip[honead]
|
878
|
+
/ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
|
857
879
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
858
880
|
|
859
|
-
/(mac\sos\sx)\s?([\w\s\.]
|
881
|
+
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
860
882
|
/(macintosh|mac(?=_powerpc)\s)/i // Mac OS
|
861
883
|
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
862
884
|
|
863
885
|
// Other
|
864
|
-
/((?:open)?solaris)[\/\s-]?([\w\.]
|
865
|
-
/(aix)\s((\d)(?=\.|\)|\s)[\w\.]
|
886
|
+
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
887
|
+
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
866
888
|
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
|
867
889
|
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
|
868
|
-
/(unix)\s?([\w\.]
|
890
|
+
/(unix)\s?([\w\.]*)/i // UNIX
|
869
891
|
], [NAME, VERSION]
|
870
892
|
]
|
871
893
|
};
|
@@ -874,7 +896,7 @@
|
|
874
896
|
/////////////////
|
875
897
|
// Constructor
|
876
898
|
////////////////
|
877
|
-
|
899
|
+
/*
|
878
900
|
var Browser = function (name, version) {
|
879
901
|
this[NAME] = name;
|
880
902
|
this[VERSION] = version;
|
@@ -889,7 +911,7 @@
|
|
889
911
|
};
|
890
912
|
var Engine = Browser;
|
891
913
|
var OS = Browser;
|
892
|
-
|
914
|
+
*/
|
893
915
|
var UAParser = function (uastring, extensions) {
|
894
916
|
|
895
917
|
if (typeof uastring === 'object') {
|
@@ -903,30 +925,35 @@
|
|
903
925
|
|
904
926
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
905
927
|
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
906
|
-
var browser = new Browser();
|
907
|
-
var cpu = new CPU();
|
908
|
-
var device = new Device();
|
909
|
-
var engine = new Engine();
|
910
|
-
var os = new OS();
|
928
|
+
//var browser = new Browser();
|
929
|
+
//var cpu = new CPU();
|
930
|
+
//var device = new Device();
|
931
|
+
//var engine = new Engine();
|
932
|
+
//var os = new OS();
|
911
933
|
|
912
934
|
this.getBrowser = function () {
|
935
|
+
var browser = { name: undefined, version: undefined };
|
913
936
|
mapper.rgx.call(browser, ua, rgxmap.browser);
|
914
937
|
browser.major = util.major(browser.version); // deprecated
|
915
938
|
return browser;
|
916
939
|
};
|
917
940
|
this.getCPU = function () {
|
941
|
+
var cpu = { architecture: undefined };
|
918
942
|
mapper.rgx.call(cpu, ua, rgxmap.cpu);
|
919
943
|
return cpu;
|
920
944
|
};
|
921
945
|
this.getDevice = function () {
|
946
|
+
var device = { vendor: undefined, model: undefined, type: undefined };
|
922
947
|
mapper.rgx.call(device, ua, rgxmap.device);
|
923
948
|
return device;
|
924
949
|
};
|
925
950
|
this.getEngine = function () {
|
951
|
+
var engine = { name: undefined, version: undefined };
|
926
952
|
mapper.rgx.call(engine, ua, rgxmap.engine);
|
927
953
|
return engine;
|
928
954
|
};
|
929
955
|
this.getOS = function () {
|
956
|
+
var os = { name: undefined, version: undefined };
|
930
957
|
mapper.rgx.call(os, ua, rgxmap.os);
|
931
958
|
return os;
|
932
959
|
};
|
@@ -945,11 +972,11 @@
|
|
945
972
|
};
|
946
973
|
this.setUA = function (uastring) {
|
947
974
|
ua = uastring;
|
948
|
-
browser = new Browser();
|
949
|
-
cpu = new CPU();
|
950
|
-
device = new Device();
|
951
|
-
engine = new Engine();
|
952
|
-
os = new OS();
|
975
|
+
//browser = new Browser();
|
976
|
+
//cpu = new CPU();
|
977
|
+
//device = new Device();
|
978
|
+
//engine = new Engine();
|
979
|
+
//os = new OS();
|
953
980
|
return this;
|
954
981
|
};
|
955
982
|
return this;
|
@@ -996,6 +1023,35 @@
|
|
996
1023
|
if (typeof module !== UNDEF_TYPE && module.exports) {
|
997
1024
|
exports = module.exports = UAParser;
|
998
1025
|
}
|
1026
|
+
// TODO: test!!!!!!!!
|
1027
|
+
/*
|
1028
|
+
if (require && require.main === module && process) {
|
1029
|
+
// cli
|
1030
|
+
var jsonize = function (arr) {
|
1031
|
+
var res = [];
|
1032
|
+
for (var i in arr) {
|
1033
|
+
res.push(new UAParser(arr[i]).getResult());
|
1034
|
+
}
|
1035
|
+
process.stdout.write(JSON.stringify(res, null, 2) + '\n');
|
1036
|
+
};
|
1037
|
+
if (process.stdin.isTTY) {
|
1038
|
+
// via args
|
1039
|
+
jsonize(process.argv.slice(2));
|
1040
|
+
} else {
|
1041
|
+
// via pipe
|
1042
|
+
var str = '';
|
1043
|
+
process.stdin.on('readable', function() {
|
1044
|
+
var read = process.stdin.read();
|
1045
|
+
if (read !== null) {
|
1046
|
+
str += read;
|
1047
|
+
}
|
1048
|
+
});
|
1049
|
+
process.stdin.on('end', function () {
|
1050
|
+
jsonize(str.replace(/\n$/, '').split('\n'));
|
1051
|
+
});
|
1052
|
+
}
|
1053
|
+
}
|
1054
|
+
*/
|
999
1055
|
exports.UAParser = UAParser;
|
1000
1056
|
} else {
|
1001
1057
|
// requirejs env (optional)
|
package/test/browser-test.json
CHANGED
@@ -1,14 +1,4 @@
|
|
1
1
|
[
|
2
|
-
{
|
3
|
-
"desc" : "Chrome Headless",
|
4
|
-
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36",
|
5
|
-
"expect" :
|
6
|
-
{
|
7
|
-
"name" : "Chrome Headless",
|
8
|
-
"version" : "HeadlessChrome",
|
9
|
-
"major" : ""
|
10
|
-
}
|
11
|
-
},
|
12
2
|
{
|
13
3
|
"desc" : "Android Browser on Galaxy Nexus",
|
14
4
|
"ua" : "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
@@ -149,6 +139,26 @@
|
|
149
139
|
"major" : "20"
|
150
140
|
}
|
151
141
|
},
|
142
|
+
{
|
143
|
+
"desc" : "Chrome Headless",
|
144
|
+
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36",
|
145
|
+
"expect" :
|
146
|
+
{
|
147
|
+
"name" : "Chrome Headless",
|
148
|
+
"version" : "undefined",
|
149
|
+
"major" : "undefined"
|
150
|
+
}
|
151
|
+
},
|
152
|
+
{
|
153
|
+
"desc" : "Chrome Headless",
|
154
|
+
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/60.0.3112.113 Safari/537.36",
|
155
|
+
"expect" :
|
156
|
+
{
|
157
|
+
"name" : "Chrome Headless",
|
158
|
+
"version" : "60.0.3112.113",
|
159
|
+
"major" : "60"
|
160
|
+
}
|
161
|
+
},
|
152
162
|
{
|
153
163
|
"desc" : "Chrome WebView",
|
154
164
|
"ua" : "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36",
|
@@ -229,6 +239,36 @@
|
|
229
239
|
"major" : "1"
|
230
240
|
}
|
231
241
|
},
|
242
|
+
{
|
243
|
+
"desc" : "Waterfox",
|
244
|
+
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.2.2 Waterfox/55.2.2",
|
245
|
+
"expect" :
|
246
|
+
{
|
247
|
+
"name" : "Waterfox",
|
248
|
+
"version" : "55.2.2",
|
249
|
+
"major" : "55"
|
250
|
+
}
|
251
|
+
},
|
252
|
+
{
|
253
|
+
"desc" : "PaleMoon",
|
254
|
+
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:52.9) Gecko/20100101 Goanna/3.4 Firefox/52.9 PaleMoon/27.6.1",
|
255
|
+
"expect" :
|
256
|
+
{
|
257
|
+
"name" : "PaleMoon",
|
258
|
+
"version" : "27.6.1",
|
259
|
+
"major" : "27"
|
260
|
+
}
|
261
|
+
},
|
262
|
+
{
|
263
|
+
"desc" : "Basilisk",
|
264
|
+
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Goanna/4.0 Firefox/55.0 Basilisk/20171113",
|
265
|
+
"expect" :
|
266
|
+
{
|
267
|
+
"name" : "Basilisk",
|
268
|
+
"version" : "20171113",
|
269
|
+
"major" : "20171113"
|
270
|
+
}
|
271
|
+
},
|
232
272
|
{
|
233
273
|
"desc" : "Facebook in-App Browser for Android",
|
234
274
|
"ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/35.0.0.48.273;]",
|
@@ -958,5 +998,61 @@
|
|
958
998
|
"version" : "6.5.8.2910",
|
959
999
|
"major" : "6"
|
960
1000
|
}
|
1001
|
+
},
|
1002
|
+
{
|
1003
|
+
"desc" : "GSA on iOS",
|
1004
|
+
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) GSA/30.1.161623614 Mobile/14F89 Safari/602.1",
|
1005
|
+
"expect" :
|
1006
|
+
{
|
1007
|
+
"name" : "GSA",
|
1008
|
+
"version" : "30.1.161623614",
|
1009
|
+
"major" : "30"
|
1010
|
+
}
|
1011
|
+
},
|
1012
|
+
{
|
1013
|
+
"desc" : "Sogou Browser",
|
1014
|
+
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0",
|
1015
|
+
"expect" :
|
1016
|
+
{
|
1017
|
+
"name" : "MetaSr"
|
1018
|
+
}
|
1019
|
+
},
|
1020
|
+
{
|
1021
|
+
"desc" : "LieBao Browser",
|
1022
|
+
"ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER",
|
1023
|
+
"expect" :
|
1024
|
+
{
|
1025
|
+
"name" : "LBBROWSER"
|
1026
|
+
}
|
1027
|
+
},
|
1028
|
+
{
|
1029
|
+
"desc" : "BaiDu Browser",
|
1030
|
+
"ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36",
|
1031
|
+
"expect" :
|
1032
|
+
{
|
1033
|
+
"name" : "BIDUBrowser",
|
1034
|
+
"version" : "8.7",
|
1035
|
+
"major" : "8"
|
1036
|
+
}
|
1037
|
+
},
|
1038
|
+
{
|
1039
|
+
"desc" : "2345 Browser",
|
1040
|
+
"ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.2.1.17116",
|
1041
|
+
"expect" :
|
1042
|
+
{
|
1043
|
+
"name" : "2345Explorer",
|
1044
|
+
"version" : "9.2.1.17116",
|
1045
|
+
"major" : "9"
|
1046
|
+
}
|
1047
|
+
},
|
1048
|
+
{
|
1049
|
+
"desc" : "QQBrowserLite",
|
1050
|
+
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14 QQBrowserLite/1.1.0",
|
1051
|
+
"expect" :
|
1052
|
+
{
|
1053
|
+
"name" : "QQBrowserLite",
|
1054
|
+
"version" : "1.1.0",
|
1055
|
+
"major" : "1"
|
1056
|
+
}
|
961
1057
|
}
|
962
1058
|
]
|