ua-parser-js 2.0.0 → 2.0.1
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/README.md +16 -5
- package/dist/ua-parser.min.js +2 -2
- package/dist/ua-parser.min.mjs +4 -0
- package/dist/ua-parser.pack.js +2 -2
- package/dist/ua-parser.pack.mjs +4 -0
- package/package.json +10 -7
- package/src/enums/ua-parser-enums.d.ts +366 -0
- package/src/enums/ua-parser-enums.js +7 -1
- package/src/enums/ua-parser-enums.mjs +7 -1
- package/src/extensions/ua-parser-extensions.d.ts +3 -2
- package/src/extensions/ua-parser-extensions.js +70 -110
- package/src/extensions/ua-parser-extensions.mjs +70 -110
- package/src/helpers/ua-parser-helpers.d.ts +2 -2
- package/src/helpers/ua-parser-helpers.js +1 -1
- package/src/helpers/ua-parser-helpers.mjs +1 -1
- package/src/main/ua-parser.d.ts +9 -5
- package/src/main/ua-parser.js +146 -80
- package/src/main/ua-parser.mjs +146 -80
package/src/main/ua-parser.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/////////////////////////////////////////////////////////////////////////////////
|
2
|
-
/* UAParser.js v2.0.
|
2
|
+
/* UAParser.js v2.0.1
|
3
3
|
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
|
4
4
|
AGPLv3 License *//*
|
5
5
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
@@ -19,20 +19,35 @@
|
|
19
19
|
// Constants
|
20
20
|
/////////////
|
21
21
|
|
22
|
-
var LIBVERSION = '2.0.
|
22
|
+
var LIBVERSION = '2.0.1',
|
23
|
+
UA_MAX_LENGTH = 500,
|
24
|
+
USER_AGENT = 'user-agent',
|
23
25
|
EMPTY = '',
|
24
26
|
UNKNOWN = '?',
|
27
|
+
|
28
|
+
// typeof
|
25
29
|
FUNC_TYPE = 'function',
|
26
30
|
UNDEF_TYPE = 'undefined',
|
27
31
|
OBJ_TYPE = 'object',
|
28
32
|
STR_TYPE = 'string',
|
29
|
-
|
30
|
-
|
33
|
+
|
34
|
+
// properties
|
35
|
+
UA_BROWSER = 'browser',
|
36
|
+
UA_CPU = 'cpu',
|
37
|
+
UA_DEVICE = 'device',
|
38
|
+
UA_ENGINE = 'engine',
|
39
|
+
UA_OS = 'os',
|
40
|
+
UA_RESULT = 'result',
|
41
|
+
|
31
42
|
NAME = 'name',
|
32
43
|
TYPE = 'type',
|
33
44
|
VENDOR = 'vendor',
|
34
45
|
VERSION = 'version',
|
35
46
|
ARCHITECTURE= 'architecture',
|
47
|
+
MAJOR = 'major',
|
48
|
+
MODEL = 'model',
|
49
|
+
|
50
|
+
// device types
|
36
51
|
CONSOLE = 'console',
|
37
52
|
MOBILE = 'mobile',
|
38
53
|
TABLET = 'tablet',
|
@@ -40,9 +55,11 @@
|
|
40
55
|
WEARABLE = 'wearable',
|
41
56
|
XR = 'xr',
|
42
57
|
EMBEDDED = 'embedded',
|
58
|
+
|
59
|
+
// browser types
|
43
60
|
INAPP = 'inapp',
|
44
|
-
|
45
|
-
|
61
|
+
|
62
|
+
// client hints
|
46
63
|
BRANDS = 'brands',
|
47
64
|
FORMFACTORS = 'formFactors',
|
48
65
|
FULLVERLIST = 'fullVersionList',
|
@@ -59,12 +76,8 @@
|
|
59
76
|
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
60
77
|
CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
|
61
78
|
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
62
|
-
|
63
|
-
|
64
|
-
UA_DEVICE = 'device',
|
65
|
-
UA_ENGINE = 'engine',
|
66
|
-
UA_OS = 'os',
|
67
|
-
UA_RESULT = 'result',
|
79
|
+
|
80
|
+
// device vendors
|
68
81
|
AMAZON = 'Amazon',
|
69
82
|
APPLE = 'Apple',
|
70
83
|
ASUS = 'ASUS',
|
@@ -76,20 +89,29 @@
|
|
76
89
|
LG = 'LG',
|
77
90
|
MICROSOFT = 'Microsoft',
|
78
91
|
MOTOROLA = 'Motorola',
|
92
|
+
NVIDIA = 'Nvidia',
|
93
|
+
ONEPLUS = 'OnePlus',
|
94
|
+
OPPO = 'OPPO',
|
79
95
|
SAMSUNG = 'Samsung',
|
80
96
|
SHARP = 'Sharp',
|
81
97
|
SONY = 'Sony',
|
82
98
|
XIAOMI = 'Xiaomi',
|
83
99
|
ZEBRA = 'Zebra',
|
84
|
-
|
85
|
-
|
100
|
+
|
101
|
+
// browsers
|
86
102
|
CHROME = 'Chrome',
|
103
|
+
CHROMIUM = 'Chromium',
|
87
104
|
CHROMECAST = 'Chromecast',
|
88
105
|
EDGE = 'Edge',
|
89
106
|
FIREFOX = 'Firefox',
|
90
107
|
OPERA = 'Opera',
|
91
108
|
FACEBOOK = 'Facebook',
|
92
109
|
SOGOU = 'Sogou',
|
110
|
+
|
111
|
+
PREFIX_MOBILE = 'Mobile ',
|
112
|
+
SUFFIX_BROWSER = ' Browser',
|
113
|
+
|
114
|
+
// os
|
93
115
|
WINDOWS = 'Windows';
|
94
116
|
|
95
117
|
var isWindow = typeof window !== UNDEF_TYPE,
|
@@ -399,6 +421,7 @@
|
|
399
421
|
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
400
422
|
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
401
423
|
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
424
|
+
/(daum)apps[\/ ]([\w\.]+)/i, // Daum App
|
402
425
|
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
403
426
|
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
404
427
|
/(alipay)client\/([\w\.]+)/i, // Alipay
|
@@ -461,8 +484,8 @@
|
|
461
484
|
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
|
462
485
|
|
463
486
|
// Other
|
464
|
-
/(
|
465
|
-
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
|
487
|
+
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
488
|
+
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
466
489
|
/\b(links) \(([\w\.]+)/i // Links
|
467
490
|
], [NAME, [VERSION, /_/g, '.']], [
|
468
491
|
|
@@ -472,30 +495,30 @@
|
|
472
495
|
|
473
496
|
cpu : [[
|
474
497
|
|
475
|
-
/\b(
|
498
|
+
/\b((amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
476
499
|
], [[ARCHITECTURE, 'amd64']], [
|
477
500
|
|
478
501
|
/(ia32(?=;))/i, // IA32 (quicktime)
|
479
|
-
|
502
|
+
/\b((i[346]|x)86)(pc)?\b/i // IA32 (x86)
|
480
503
|
], [[ARCHITECTURE, 'ia32']], [
|
481
504
|
|
482
|
-
/\b(aarch64|arm(v?
|
505
|
+
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i // ARM64
|
483
506
|
], [[ARCHITECTURE, 'arm64']], [
|
484
507
|
|
485
|
-
/\b(arm(
|
508
|
+
/\b(arm(v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
486
509
|
], [[ARCHITECTURE, 'armhf']], [
|
487
510
|
|
488
511
|
// PocketPC mistakenly identified as PowerPC
|
489
|
-
/
|
512
|
+
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
490
513
|
], [[ARCHITECTURE, 'arm']], [
|
491
514
|
|
492
|
-
/((
|
515
|
+
/((ppc|powerpc)(64)?)( mac|;|\))/i // PowerPC
|
493
516
|
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
494
517
|
|
495
|
-
/
|
518
|
+
/ sun4\w[;\)]/i // SPARC
|
496
519
|
], [[ARCHITECTURE, 'sparc']], [
|
497
520
|
|
498
|
-
|
521
|
+
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i
|
499
522
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
500
523
|
], [[ARCHITECTURE, lowerize]]
|
501
524
|
],
|
@@ -529,34 +552,38 @@
|
|
529
552
|
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
530
553
|
|
531
554
|
// Honor
|
532
|
-
|
555
|
+
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
556
|
+
], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [
|
557
|
+
/honor([-\w ]+)[;\)]/i
|
533
558
|
], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
|
534
559
|
|
535
560
|
// Huawei
|
536
|
-
/\b((?:ag[rs][
|
561
|
+
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
537
562
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
538
563
|
/(?:huawei)([-\w ]+)[;\)]/i,
|
539
564
|
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
540
565
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
541
566
|
|
542
567
|
// Xiaomi
|
568
|
+
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
569
|
+
/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
|
570
|
+
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
571
|
+
|
543
572
|
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
544
573
|
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
545
574
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
546
575
|
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
547
576
|
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
548
|
-
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i // Xiaomi Mi
|
577
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i, // Xiaomi Mi
|
578
|
+
/ ([\w ]+) miui\/v?\d/i
|
549
579
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
550
|
-
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
|
551
|
-
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
552
|
-
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
553
580
|
|
554
581
|
// OPPO
|
555
582
|
/; (\w+) bui.+ oppo/i,
|
556
583
|
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
557
|
-
], [MODEL, [VENDOR,
|
558
|
-
/\b(opd2\d{3}a?) bui/i
|
559
|
-
], [MODEL, [VENDOR, '
|
584
|
+
], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [
|
585
|
+
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
586
|
+
], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [
|
560
587
|
|
561
588
|
// Vivo
|
562
589
|
/vivo (\w+)(?: bui|\))/i,
|
@@ -570,7 +597,7 @@
|
|
570
597
|
// Motorola
|
571
598
|
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
572
599
|
/\bmot(?:orola)?[- ](\w*)/i,
|
573
|
-
/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
600
|
+
/((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
574
601
|
], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
|
575
602
|
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
576
603
|
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
@@ -579,22 +606,24 @@
|
|
579
606
|
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
580
607
|
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
581
608
|
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
582
|
-
/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
|
609
|
+
/\blg[-e;\/ ]+((?!browser|netcast|android tv|watch)\w+)/i,
|
583
610
|
/\blg-?([\d\w]+) bui/i
|
584
611
|
], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
|
585
612
|
|
586
613
|
// Lenovo
|
587
|
-
/(ideatab[-\w ]+)/i,
|
588
|
-
/lenovo ?(
|
614
|
+
/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
|
615
|
+
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
589
616
|
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
590
617
|
|
591
618
|
// Nokia
|
592
|
-
/(
|
593
|
-
|
594
|
-
|
619
|
+
/(nokia) (t[12][01])/i
|
620
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
621
|
+
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
622
|
+
/nokia[-_ ]?(([-\w\. ]*))/i
|
623
|
+
], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
|
595
624
|
|
596
625
|
// Google
|
597
|
-
/(pixel c)\b/i
|
626
|
+
/(pixel (c|tablet))\b/i // Google Pixel C/Tablet
|
598
627
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
|
599
628
|
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i // Google Pixel
|
600
629
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
@@ -609,7 +638,7 @@
|
|
609
638
|
// OnePlus
|
610
639
|
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
611
640
|
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
612
|
-
], [MODEL, [VENDOR,
|
641
|
+
], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
|
613
642
|
|
614
643
|
// Amazon
|
615
644
|
/(alexa)webm/i,
|
@@ -685,18 +714,19 @@
|
|
685
714
|
], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
|
686
715
|
|
687
716
|
// MIXED
|
688
|
-
/(
|
717
|
+
/(imo) (tab \w+)/i, // IMO
|
718
|
+
/(infinix) (x1101b?)/i // Infinix XPad
|
719
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
720
|
+
|
721
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
689
722
|
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
|
690
|
-
/; (imo) (
|
723
|
+
/; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO
|
691
724
|
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
692
|
-
/(asus)-?(\w+)/i, // Asus
|
693
725
|
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
694
|
-
/(lenovo)[-_ ]?([-\w]
|
695
|
-
/(jolla)/i, // Jolla
|
726
|
+
/(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo
|
696
727
|
/(oppo) ?([\w ]+) bui/i // OPPO
|
697
728
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
698
729
|
|
699
|
-
/(imo) (tab \w+)/i, // IMO
|
700
730
|
/(kobo)\s(ereader|touch)/i, // Kobo
|
701
731
|
/(archos) (gamepad2?)/i, // Archos
|
702
732
|
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
@@ -707,8 +737,8 @@
|
|
707
737
|
], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
|
708
738
|
/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
|
709
739
|
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
710
|
-
/(shield[\w ]
|
711
|
-
], [MODEL, [VENDOR,
|
740
|
+
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i // Nvidia Tablets
|
741
|
+
], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [
|
712
742
|
/(sprint) (\w+)/i // Sprint Phones
|
713
743
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
714
744
|
/(kin\.[onetw]{3})/i // Microsoft Kin
|
@@ -740,19 +770,24 @@
|
|
740
770
|
], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
741
771
|
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
742
772
|
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
773
|
+
/(shield \w+ tv)/i // Nvidia Shield TV
|
774
|
+
], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [
|
743
775
|
/\(dtv[\);].+(aquos)/i,
|
744
776
|
/(aquos-tv[\w ]+)\)/i // Sharp
|
745
777
|
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
746
778
|
/(bravia[\w ]+)( bui|\))/i // Sony
|
747
779
|
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
748
|
-
/(
|
780
|
+
/(mi(tv|box)-?\w+) bui/i // Xiaomi
|
749
781
|
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
750
782
|
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
751
783
|
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
752
784
|
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
753
785
|
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
754
786
|
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
755
|
-
|
787
|
+
// SmartTV from Unidentified Vendors
|
788
|
+
/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i
|
789
|
+
], [MODEL, [TYPE, SMARTTV]], [
|
790
|
+
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
|
756
791
|
], [[TYPE, SMARTTV]], [
|
757
792
|
|
758
793
|
///////////////////
|
@@ -762,8 +797,8 @@
|
|
762
797
|
/(ouya)/i, // Ouya
|
763
798
|
/(nintendo) (\w+)/i // Nintendo
|
764
799
|
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
765
|
-
/droid.+; (shield) bui/i
|
766
|
-
], [MODEL, [VENDOR,
|
800
|
+
/droid.+; (shield)( bui|\))/i // Nvidia Portable
|
801
|
+
], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [
|
767
802
|
/(playstation \w+)/i // Playstation
|
768
803
|
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
769
804
|
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
@@ -773,12 +808,23 @@
|
|
773
808
|
// WEARABLES
|
774
809
|
///////////////////
|
775
810
|
|
776
|
-
/\b(sm-[lr]\d\d[
|
811
|
+
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
|
777
812
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
778
|
-
/((pebble))app/i
|
813
|
+
/((pebble))app/i, // Pebble
|
814
|
+
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch
|
779
815
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
816
|
+
/(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
|
817
|
+
], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
|
780
818
|
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
781
819
|
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
820
|
+
/(opwwe\d{3})/i // OnePlus Watch
|
821
|
+
], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [
|
822
|
+
/(moto 360)/i // Motorola 360
|
823
|
+
], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [
|
824
|
+
/(smartwatch 3)/i // Sony SmartWatch
|
825
|
+
], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [
|
826
|
+
/(g watch r)/i // LG G Watch R
|
827
|
+
], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [
|
782
828
|
/droid.+; (wt63?0{2,3})\)/i
|
783
829
|
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
784
830
|
|
@@ -801,20 +847,22 @@
|
|
801
847
|
], [VENDOR, [TYPE, EMBEDDED]], [
|
802
848
|
/(aeobc)\b/i // Echo Dot
|
803
849
|
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
850
|
+
/(homepod).+mac os/i // Apple HomePod
|
851
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [
|
852
|
+
/windows iot/i
|
853
|
+
], [[TYPE, EMBEDDED]], [
|
804
854
|
|
805
855
|
////////////////////
|
806
856
|
// MIXED (GENERIC)
|
807
857
|
///////////////////
|
808
858
|
|
809
|
-
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?
|
810
|
-
], [MODEL, [TYPE,
|
811
|
-
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
812
|
-
], [MODEL, [TYPE, TABLET]], [
|
859
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i
|
860
|
+
], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
|
813
861
|
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
814
862
|
], [[TYPE, TABLET]], [
|
815
863
|
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
816
864
|
], [[TYPE, MOBILE]], [
|
817
|
-
/(
|
865
|
+
/droid .+?; ([\w\. -]+)( bui|\))/i // Generic Android Device
|
818
866
|
], [MODEL, [VENDOR, 'Generic']]
|
819
867
|
],
|
820
868
|
|
@@ -834,8 +882,11 @@
|
|
834
882
|
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
835
883
|
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
836
884
|
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
837
|
-
|
885
|
+
|
886
|
+
/\b(libweb)/i // LibWeb
|
838
887
|
], [NAME, VERSION], [
|
888
|
+
/ladybird\//i
|
889
|
+
], [[NAME, 'LibWeb']], [
|
839
890
|
|
840
891
|
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
841
892
|
], [VERSION, NAME]
|
@@ -846,15 +897,15 @@
|
|
846
897
|
// Windows
|
847
898
|
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
848
899
|
], [NAME, VERSION], [
|
849
|
-
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i
|
900
|
+
/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
850
901
|
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
851
|
-
/windows nt 6\.2; (arm)/i,
|
852
|
-
/windows[\/ ]
|
902
|
+
/windows nt 6\.2; (arm)/i, // Windows RT
|
903
|
+
/windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,
|
853
904
|
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
854
905
|
], [[VERSION, strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
855
906
|
|
856
907
|
// iOS/macOS
|
857
|
-
/
|
908
|
+
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
858
909
|
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
859
910
|
/cfnetwork\/.+darwin/i
|
860
911
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
@@ -876,15 +927,15 @@
|
|
876
927
|
|
877
928
|
// Mobile OSes
|
878
929
|
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
879
|
-
], [VERSION, NAME], [
|
880
|
-
/(
|
881
|
-
/(
|
882
|
-
|
883
|
-
|
930
|
+
], [VERSION, NAME], [
|
931
|
+
/(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
|
932
|
+
], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
|
933
|
+
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
934
|
+
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/; ]?([\d\.]*)/i
|
884
935
|
], [NAME, VERSION], [
|
885
936
|
/\(bb(10);/i // BlackBerry 10
|
886
937
|
], [VERSION, [NAME, BLACKBERRY]], [
|
887
|
-
/(?:symbian ?os|symbos|s60(?=;)|
|
938
|
+
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
|
888
939
|
], [VERSION, [NAME, 'Symbian']], [
|
889
940
|
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
|
890
941
|
], [VERSION, [NAME, FIREFOX+' OS']], [
|
@@ -914,7 +965,7 @@
|
|
914
965
|
/(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux
|
915
966
|
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
916
967
|
// Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
|
917
|
-
/(hurd|linux) ?([\w\.]*)/i,
|
968
|
+
/(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i, // Hurd/Linux
|
918
969
|
/(gnu) ?([\w\.]*)/i, // GNU
|
919
970
|
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
920
971
|
/(haiku) (\w+)/i // Haiku
|
@@ -1151,17 +1202,27 @@
|
|
1151
1202
|
|
1152
1203
|
switch (this.itemType) {
|
1153
1204
|
case UA_BROWSER:
|
1205
|
+
case UA_ENGINE:
|
1154
1206
|
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
1155
1207
|
if (brands) {
|
1156
1208
|
for (var i in brands) {
|
1157
|
-
var brandName =
|
1209
|
+
var brandName = brands[i].brand || brands[i],
|
1158
1210
|
brandVersion = brands[i].version;
|
1159
|
-
if (!/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) &&
|
1211
|
+
if (this.itemType == UA_BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && brandName != CHROMIUM))) {
|
1212
|
+
brandName = strMapper(brandName, {
|
1213
|
+
'Chrome' : 'Google Chrome',
|
1214
|
+
'Edge' : 'Microsoft Edge',
|
1215
|
+
'Chrome WebView' : 'Android WebView',
|
1216
|
+
'Chrome Headless' : 'HeadlessChrome'
|
1217
|
+
});
|
1160
1218
|
this.set(NAME, brandName)
|
1161
1219
|
.set(VERSION, brandVersion)
|
1162
1220
|
.set(MAJOR, majorize(brandVersion));
|
1163
1221
|
prevName = brandName;
|
1164
1222
|
}
|
1223
|
+
if (this.itemType == UA_ENGINE && brandName == CHROMIUM) {
|
1224
|
+
this.set(VERSION, brandVersion);
|
1225
|
+
}
|
1165
1226
|
}
|
1166
1227
|
}
|
1167
1228
|
break;
|
@@ -1178,11 +1239,16 @@
|
|
1178
1239
|
}
|
1179
1240
|
if (uaCH[MODEL]) {
|
1180
1241
|
this.set(MODEL, uaCH[MODEL]);
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1242
|
+
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
1243
|
+
var reParse = {};
|
1244
|
+
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
1245
|
+
if (!this.get(TYPE) && !!reParse.type) {
|
1246
|
+
this.set(TYPE, reParse.type);
|
1247
|
+
}
|
1248
|
+
if (!this.get(VENDOR) && !!reParse.vendor) {
|
1249
|
+
this.set(VENDOR, reParse.vendor);
|
1250
|
+
}
|
1251
|
+
}
|
1186
1252
|
}
|
1187
1253
|
if (uaCH[FORMFACTORS]) {
|
1188
1254
|
var ff;
|