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/src/ua-parser.js CHANGED
@@ -1,10 +1,10 @@
1
- /**
2
- * UAParser.js v0.7.14
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 & MIT
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.14',
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\.]+)*/i,
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\.]+)*/i, // Rekonq
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 // Microsoft Edge
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
- /(headlesschrome) ([\w\.]+)/i // Chrome Headless
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\.-]+)/i,
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\.]+)*/i, // GoBrowser
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\/[\w\.]+.*silk\//i // Kindle Fire HD
531
+ /(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
513
532
  ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
514
- /(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i // Fire Phone
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-]+)*/i,
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+)*/i, // ZTE
558
- /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i
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))?(:?\s4g)?)[\w\s]+build\//i,
579
- /mot[\s-]?(\w+)*/i,
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-]*)*/i,
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+)*/i // Siemens
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-]+)*/i
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+)*/i,
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.+(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
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\w)?)\s+build/i // Xiaomi Mi
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 // OnePlus
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.+[;\/]\s*(Venue[\d\s]*)\s+build/i // Dell Venue Tablets
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.+[;\/]\s*(zte)?.+(k\d{2})\s+build/i // ZTE K Series Tablet
677
- ], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [
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}x?.*)\s+build/i,
689
- /android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(.+)\s+build/i // Dragon Touch Tablet
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-?.+)\s+build/i // Insignia Tablets
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)-?.+)\s+build/i // NextBook Tablets
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\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
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\-?)?(V1[12])\s+build/i // LvTel Phones
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\-]+(.*\b)\s+build/i // Le Pan Tablets
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.+)\s+build/i // Gigaset Tablets
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.+)[;\/].+build/i // Generic Android Device
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\.]+).*(gecko)/i // Gecko
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]+\w)*/i, // Windows Phone
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\.]+)*/i, // Blackberry
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\.]+)*/i,
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\.]+)*/i // Symbian
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+)*/i, // Mint
854
+ /(mint)[\/\s\(]?(\w*)/i, // Mint
833
855
  /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
834
- /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,
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\.]+)*/i, // Hurd/Linux
838
- /(gnu)\s?([\w\.]+)*/i // GNU
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\.]+\d)*/i // Solaris
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\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
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 // Haiku
874
+ /(haiku)\s(\w+)/i // Haiku
853
875
  ], [NAME, VERSION],[
854
876
 
855
877
  /cfnetwork\/.+darwin/i,
856
- /ip[honead]+(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i // iOS
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\.]+\w)*/i,
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\.]+)*/i, // Solaris
865
- /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX
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\.]+)*/i // UNIX
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)
@@ -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
  ]