ua-parser-js 2.0.0-alpha.3 → 2.0.0-beta.2
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE.md +616 -0
- package/README.md +220 -0
- package/dist/ua-parser.min.js +3 -3
- package/dist/ua-parser.pack.js +3 -3
- package/package.json +44 -11
- package/src/enums/ua-parser-enums.js +321 -74
- package/src/enums/ua-parser-enums.mjs +322 -75
- package/src/extensions/ua-parser-extensions.d.ts +13 -0
- package/src/extensions/ua-parser-extensions.js +2 -2
- package/src/extensions/ua-parser-extensions.mjs +3 -3
- package/src/helpers/ua-parser-helpers.d.ts +15 -0
- package/src/helpers/ua-parser-helpers.js +9 -29
- package/src/helpers/ua-parser-helpers.mjs +10 -30
- package/src/main/ua-parser.d.ts +106 -0
- package/src/main/ua-parser.js +107 -46
- package/src/main/ua-parser.mjs +104 -43
- package/license.md +0 -21
- package/readme.md +0 -653
package/src/main/ua-parser.mjs
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
// Generated ESM version of
|
1
|
+
// Generated ESM version of ua-parser-js
|
2
2
|
// DO NOT EDIT THIS FILE!
|
3
3
|
// Source: /src/main/ua-parser.js
|
4
4
|
|
5
5
|
/////////////////////////////////////////////////////////////////////////////////
|
6
|
-
/* UAParser.js v2.0.0-
|
6
|
+
/* UAParser.js v2.0.0-beta.2
|
7
7
|
Copyright © 2012-2023 Faisal Salman <f@faisalman.com>
|
8
|
-
|
8
|
+
AGPLv3 License *//*
|
9
9
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
10
10
|
Supports browser & node.js environment.
|
11
11
|
Demo : https://faisalman.github.io/ua-parser-js
|
@@ -21,8 +21,7 @@
|
|
21
21
|
// Constants
|
22
22
|
/////////////
|
23
23
|
|
24
|
-
|
25
|
-
var LIBVERSION = '2.0.0-alpha.3',
|
24
|
+
var LIBVERSION = '2.0.0-beta.2',
|
26
25
|
EMPTY = '',
|
27
26
|
UNKNOWN = '?',
|
28
27
|
FUNC_TYPE = 'function',
|
@@ -43,8 +42,9 @@
|
|
43
42
|
WEARABLE = 'wearable',
|
44
43
|
EMBEDDED = 'embedded',
|
45
44
|
USER_AGENT = 'user-agent',
|
46
|
-
UA_MAX_LENGTH =
|
45
|
+
UA_MAX_LENGTH = 500,
|
47
46
|
BRANDS = 'brands',
|
47
|
+
FORMFACTOR = 'formFactor',
|
48
48
|
FULLVERLIST = 'fullVersionList',
|
49
49
|
PLATFORM = 'platform',
|
50
50
|
PLATFORMVER = 'platformVersion',
|
@@ -53,11 +53,12 @@
|
|
53
53
|
CH_HEADER_FULL_VER_LIST = CH_HEADER + '-full-version-list',
|
54
54
|
CH_HEADER_ARCH = CH_HEADER + '-arch',
|
55
55
|
CH_HEADER_BITNESS = CH_HEADER + '-' + BITNESS,
|
56
|
+
CH_HEADER_FORM_FACTOR = CH_HEADER + '-form-factor',
|
56
57
|
CH_HEADER_MOBILE = CH_HEADER + '-' + MOBILE,
|
57
58
|
CH_HEADER_MODEL = CH_HEADER + '-' + MODEL,
|
58
59
|
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
59
60
|
CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
|
60
|
-
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, BITNESS],
|
61
|
+
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTOR, BITNESS],
|
61
62
|
UA_BROWSER = 'browser',
|
62
63
|
UA_CPU = 'cpu',
|
63
64
|
UA_DEVICE = 'device',
|
@@ -70,6 +71,7 @@
|
|
70
71
|
BLACKBERRY = 'BlackBerry',
|
71
72
|
GOOGLE = 'Google',
|
72
73
|
HUAWEI = 'Huawei',
|
74
|
+
LENOVO = 'Lenovo',
|
73
75
|
LG = 'LG',
|
74
76
|
MICROSOFT = 'Microsoft',
|
75
77
|
MOTOROLA = 'Motorola',
|
@@ -85,9 +87,11 @@
|
|
85
87
|
FIREFOX = 'Firefox',
|
86
88
|
OPERA = 'Opera',
|
87
89
|
FACEBOOK = 'Facebook',
|
90
|
+
SOGOU = 'Sogou',
|
88
91
|
WINDOWS = 'Windows';
|
89
92
|
|
90
|
-
var
|
93
|
+
var isWindow = typeof window !== UNDEF_TYPE,
|
94
|
+
NAVIGATOR = (isWindow && window.navigator) ?
|
91
95
|
window.navigator :
|
92
96
|
undefined,
|
93
97
|
NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ?
|
@@ -119,28 +123,35 @@
|
|
119
123
|
}
|
120
124
|
return false;
|
121
125
|
}
|
122
|
-
return
|
126
|
+
return isString(str1) ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
|
123
127
|
},
|
124
128
|
isExtensions = function (obj) {
|
125
129
|
for (var prop in obj) {
|
126
130
|
return /^(browser|cpu|device|engine|os)$/.test(prop);
|
127
131
|
}
|
128
132
|
},
|
133
|
+
isString = function (val) {
|
134
|
+
return typeof val === STR_TYPE;
|
135
|
+
},
|
129
136
|
itemListToArray = function (header) {
|
130
137
|
if (!header) return undefined;
|
131
138
|
var arr = [];
|
132
|
-
var tokens = strip(/\\?\"/g, header).split(',
|
139
|
+
var tokens = strip(/\\?\"/g, header).split(',');
|
133
140
|
for (var i = 0; i < tokens.length; i++) {
|
134
|
-
|
135
|
-
|
141
|
+
if (tokens[i].indexOf(';') > -1) {
|
142
|
+
var token = trim(tokens[i]).split(';v=');
|
143
|
+
arr[i] = { brand : token[0], version : token[1] };
|
144
|
+
} else {
|
145
|
+
arr[i] = trim(tokens[i]);
|
146
|
+
}
|
136
147
|
}
|
137
148
|
return arr;
|
138
149
|
},
|
139
150
|
lowerize = function (str) {
|
140
|
-
return
|
151
|
+
return isString(str) ? str.toLowerCase() : str;
|
141
152
|
},
|
142
153
|
majorize = function (version) {
|
143
|
-
return
|
154
|
+
return isString(version) ? strip(/[^\d\.]/g, version).split('.')[0] : undefined;
|
144
155
|
},
|
145
156
|
setProps = function (arr) {
|
146
157
|
for (var i in arr) {
|
@@ -154,15 +165,15 @@
|
|
154
165
|
return this;
|
155
166
|
},
|
156
167
|
strip = function (pattern, str) {
|
157
|
-
return str.replace(pattern, EMPTY);
|
168
|
+
return isString(str) ? str.replace(pattern, EMPTY) : str;
|
158
169
|
},
|
159
|
-
stripQuotes = function (
|
160
|
-
return
|
170
|
+
stripQuotes = function (str) {
|
171
|
+
return strip(/\\?\"/g, str);
|
161
172
|
},
|
162
173
|
trim = function (str, len) {
|
163
|
-
if (
|
174
|
+
if (isString(str)) {
|
164
175
|
str = strip(/^\s\s*/, str);
|
165
|
-
return typeof
|
176
|
+
return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
166
177
|
}
|
167
178
|
};
|
168
179
|
|
@@ -239,7 +250,7 @@
|
|
239
250
|
return (i === UNKNOWN) ? undefined : i;
|
240
251
|
}
|
241
252
|
}
|
242
|
-
return str;
|
253
|
+
return map.hasOwnProperty('*') ? map['*'] : str;
|
243
254
|
};
|
244
255
|
|
245
256
|
///////////////
|
@@ -258,6 +269,16 @@
|
|
258
269
|
'8.1' : 'NT 6.3',
|
259
270
|
'10' : ['NT 6.4', 'NT 10.0'],
|
260
271
|
'RT' : 'ARM'
|
272
|
+
},
|
273
|
+
|
274
|
+
formFactorMap = {
|
275
|
+
'embedded' : 'Automotive',
|
276
|
+
'mobile' : 'Mobile',
|
277
|
+
'tablet' : ['Tablet', 'EInk'],
|
278
|
+
'smarttv' : 'TV',
|
279
|
+
'wearable' : ['VR', 'XR', 'Watch'],
|
280
|
+
'?' : ['Desktop', 'Unknown'],
|
281
|
+
'*' : undefined
|
261
282
|
};
|
262
283
|
|
263
284
|
//////////////
|
@@ -281,15 +302,18 @@
|
|
281
302
|
], [NAME, VERSION], [
|
282
303
|
/opios[\/ ]+([\w\.]+)/i // Opera mini on iphone >= 8.0
|
283
304
|
], [VERSION, [NAME, OPERA+' Mini']], [
|
305
|
+
/\bop(?:rg)?x\/([\w\.]+)/i // Opera GX
|
306
|
+
], [VERSION, [NAME, OPERA+' GX']], [
|
284
307
|
/\bopr\/([\w\.]+)/i // Opera Webkit
|
285
308
|
], [VERSION, [NAME, OPERA]], [
|
286
309
|
|
287
310
|
// Mixed
|
311
|
+
/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu
|
312
|
+
], [VERSION, [NAME, 'Baidu']], [
|
288
313
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
289
314
|
/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
290
315
|
// Trident based
|
291
|
-
/(avant
|
292
|
-
/(ba?idubrowser)[\/ ]?([\w\.]+)/i, // Baidu Browser
|
316
|
+
/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser
|
293
317
|
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
|
294
318
|
|
295
319
|
// Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
@@ -301,8 +325,7 @@
|
|
301
325
|
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
|
302
326
|
], [VERSION, [NAME, 'UCBrowser']], [
|
303
327
|
/microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
|
304
|
-
/\bqbcore\/([\w\.]+).+microm/i
|
305
|
-
], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
|
328
|
+
/\bqbcore\/([\w\.]+).+microm/i,
|
306
329
|
/micromessenger\/([\w\.]+)/i // WeChat
|
307
330
|
], [VERSION, [NAME, 'WeChat']], [
|
308
331
|
/konqueror\/([\w\.]+)/i // Konqueror
|
@@ -311,6 +334,8 @@
|
|
311
334
|
], [VERSION, [NAME, 'IE']], [
|
312
335
|
/ya(?:search)?browser\/([\w\.]+)/i // Yandex
|
313
336
|
], [VERSION, [NAME, 'Yandex']], [
|
337
|
+
/slbrowser\/([\w\.]+)/i // Smart Lenovo Browser
|
338
|
+
], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [
|
314
339
|
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
|
315
340
|
], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [
|
316
341
|
/\bfocus\/([\w\.]+)/i // Firefox Focus
|
@@ -329,15 +354,20 @@
|
|
329
354
|
], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [
|
330
355
|
/\bqihu|(qi?ho?o?|360)browser/i // 360
|
331
356
|
], [[NAME, '360' + SUFFIX_BROWSER]], [
|
332
|
-
/(oculus|
|
333
|
-
], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [
|
357
|
+
/(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i
|
358
|
+
], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser
|
359
|
+
/samsungbrowser\/([\w\.]+)/i // Samsung Internet
|
360
|
+
], [VERSION, [NAME, SAMSUNG + ' Internet']], [
|
334
361
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
335
362
|
], [[NAME, /_/g, ' '], VERSION], [
|
363
|
+
/metasr[\/ ]?([\d\.]+)/i // Sogou Explorer
|
364
|
+
], [VERSION, [NAME, SOGOU + ' Explorer']], [
|
365
|
+
/(sogou)mo\w+\/([\d\.]+)/i // Sogou Mobile
|
366
|
+
], [[NAME, SOGOU + ' Mobile'], VERSION], [
|
336
367
|
/(electron)\/([\w\.]+) safari/i, // Electron-based App
|
337
368
|
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
|
338
|
-
/m?(qqbrowser|
|
369
|
+
/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/2345 Browser
|
339
370
|
], [NAME, VERSION], [
|
340
|
-
/(metasr)[\/ ]?([\w\.]+)/i, // SouGouBrowser
|
341
371
|
/(lbbrowser)/i, // LieBao Browser
|
342
372
|
/\[(linkedin)app\]/i // LinkedIn App for iOS & Android
|
343
373
|
], [NAME], [
|
@@ -345,10 +375,12 @@
|
|
345
375
|
// WebView
|
346
376
|
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
|
347
377
|
], [[NAME, FACEBOOK], VERSION], [
|
378
|
+
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
348
379
|
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
349
380
|
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
350
381
|
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
351
382
|
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
383
|
+
/(alipay)client\/([\w\.]+)/i, // Alipay
|
352
384
|
/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i // Chromium/Instagram/Snapchat
|
353
385
|
], [NAME, VERSION], [
|
354
386
|
/\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
|
@@ -480,8 +512,10 @@
|
|
480
512
|
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
481
513
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
482
514
|
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
515
|
+
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
483
516
|
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
|
484
517
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
518
|
+
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
|
485
519
|
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
486
520
|
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
487
521
|
|
@@ -496,7 +530,7 @@
|
|
496
530
|
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
497
531
|
|
498
532
|
// Realme
|
499
|
-
/\b(rmx[
|
533
|
+
/\b(rmx[1-3]\d{3})(?: bui|;|\))/i
|
500
534
|
], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
|
501
535
|
|
502
536
|
// Motorola
|
@@ -518,7 +552,7 @@
|
|
518
552
|
// Lenovo
|
519
553
|
/(ideatab[-\w ]+)/i,
|
520
554
|
/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
|
521
|
-
], [MODEL, [VENDOR,
|
555
|
+
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
522
556
|
|
523
557
|
// Nokia
|
524
558
|
/(?:maemo|nokia).*(n900|lumia \d+)/i,
|
@@ -582,6 +616,10 @@
|
|
582
616
|
/droid.+; (m[1-5] note) bui/i,
|
583
617
|
/\bmz-([-\w]{2,})/i
|
584
618
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
619
|
+
|
620
|
+
// Ulefone
|
621
|
+
/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
|
622
|
+
], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [
|
585
623
|
|
586
624
|
// MIXED
|
587
625
|
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
|
@@ -688,7 +726,7 @@
|
|
688
726
|
// MIXED (GENERIC)
|
689
727
|
///////////////////
|
690
728
|
|
691
|
-
/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i
|
729
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors
|
692
730
|
], [MODEL, [TYPE, MOBILE]], [
|
693
731
|
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
694
732
|
], [MODEL, [TYPE, TABLET]], [
|
@@ -725,12 +763,12 @@
|
|
725
763
|
// Windows
|
726
764
|
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
727
765
|
], [NAME, VERSION], [
|
728
|
-
/(windows
|
729
|
-
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, // Windows Phone
|
730
|
-
/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i
|
766
|
+
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
731
767
|
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
732
|
-
/
|
733
|
-
|
768
|
+
/windows nt 6\.2; (arm)/i, // Windows RT
|
769
|
+
/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
|
770
|
+
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
771
|
+
], [[VERSION, strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
734
772
|
|
735
773
|
// iOS/macOS
|
736
774
|
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
@@ -932,6 +970,7 @@
|
|
932
970
|
[PLATFORM, stripQuotes(uach[CH_HEADER_PLATFORM])],
|
933
971
|
[PLATFORMVER, stripQuotes(uach[CH_HEADER_PLATFORM_VER])],
|
934
972
|
[ARCHITECTURE, stripQuotes(uach[CH_HEADER_ARCH])],
|
973
|
+
[FORMFACTOR, itemListToArray(uach[CH_HEADER_FORM_FACTOR])],
|
935
974
|
[BITNESS, stripQuotes(uach[CH_HEADER_BITNESS])]
|
936
975
|
]);
|
937
976
|
} else {
|
@@ -1013,21 +1052,21 @@
|
|
1013
1052
|
};
|
1014
1053
|
|
1015
1054
|
this.parseCH = function () {
|
1016
|
-
var
|
1017
|
-
uaCH = this.uaCH,
|
1055
|
+
var uaCH = this.uaCH,
|
1018
1056
|
rgxMap = this.rgxMap;
|
1019
1057
|
|
1020
1058
|
switch (this.itemType) {
|
1021
1059
|
case UA_BROWSER:
|
1022
|
-
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS];
|
1060
|
+
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
1023
1061
|
if (brands) {
|
1024
1062
|
for (var i in brands) {
|
1025
|
-
var brandName = brands[i].brand,
|
1063
|
+
var brandName = strip(/(Google|Microsoft) /, brands[i].brand || brands[i]),
|
1026
1064
|
brandVersion = brands[i].version;
|
1027
|
-
if (!/not.a.brand/i.test(brandName) && (
|
1028
|
-
this.set(NAME,
|
1065
|
+
if (!/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && !/chromi/i.test(brandName)))) {
|
1066
|
+
this.set(NAME, brandName)
|
1029
1067
|
.set(VERSION, brandVersion)
|
1030
1068
|
.set(MAJOR, majorize(brandVersion));
|
1069
|
+
prevName = brandName;
|
1031
1070
|
}
|
1032
1071
|
}
|
1033
1072
|
}
|
@@ -1046,6 +1085,23 @@
|
|
1046
1085
|
if (uaCH[MODEL]) {
|
1047
1086
|
this.set(MODEL, uaCH[MODEL]);
|
1048
1087
|
}
|
1088
|
+
// Xbox-Specific Detection
|
1089
|
+
if (uaCH[MODEL] == 'Xbox') {
|
1090
|
+
this.set(TYPE, CONSOLE)
|
1091
|
+
.set(VENDOR, MICROSOFT);
|
1092
|
+
}
|
1093
|
+
if (uaCH[FORMFACTOR]) {
|
1094
|
+
var ff;
|
1095
|
+
if (typeof uaCH[FORMFACTOR] !== 'string') {
|
1096
|
+
var idx = 0;
|
1097
|
+
while (!ff && idx < uaCH[FORMFACTOR].length) {
|
1098
|
+
ff = strMapper(uaCH[FORMFACTOR][idx++], formFactorMap);
|
1099
|
+
}
|
1100
|
+
} else {
|
1101
|
+
ff = strMapper(uaCH[FORMFACTOR], formFactorMap);
|
1102
|
+
}
|
1103
|
+
this.set(TYPE, ff);
|
1104
|
+
}
|
1049
1105
|
break;
|
1050
1106
|
case UA_OS:
|
1051
1107
|
var osName = uaCH[PLATFORM];
|
@@ -1055,6 +1111,11 @@
|
|
1055
1111
|
this.set(NAME, osName)
|
1056
1112
|
.set(VERSION, osVersion);
|
1057
1113
|
}
|
1114
|
+
// Xbox-Specific Detection
|
1115
|
+
if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {
|
1116
|
+
this.set(NAME, 'Xbox')
|
1117
|
+
.set(VERSION, undefined);
|
1118
|
+
}
|
1058
1119
|
break;
|
1059
1120
|
case UA_RESULT:
|
1060
1121
|
var data = this.data;
|
@@ -1148,7 +1209,7 @@
|
|
1148
1209
|
['getResult', createItemFunc(UA_RESULT)],
|
1149
1210
|
['getUA', function () { return userAgent; }],
|
1150
1211
|
['setUA', function (ua) {
|
1151
|
-
if (
|
1212
|
+
if (isString(ua))
|
1152
1213
|
userAgent = ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
|
1153
1214
|
return this;
|
1154
1215
|
}]
|
package/license.md
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
MIT License
|
2
|
-
|
3
|
-
Copyright (c) 2012-2023 Faisal Salman <<f@faisalman.com>>
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|