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