svelte-system-info
Version:
determines name and version of underlying browser and operating system
240 lines (238 loc) • 8.83 kB
JavaScript
//----------------------------------------------------------------------------//
// Svelte System Info //
//----------------------------------------------------------------------------//
var UserAgent = {
Value: window.navigator.userAgent,
contains: function contains(ValueToSearchFor) {
return (this.Value.indexOf(ValueToSearchFor) >= 0);
},
lacks: function lacks(ValueToSearchFor) {
return (this.Value.indexOf(ValueToSearchFor) < 0);
},
match: function match(Pattern) {
return this.Value.match(Pattern);
},
matches: function matches(Pattern) {
return (this.Value.match(Pattern) != null);
},
};
/**** DeviceBrowserName ****/
// based on: https://github.com/keithws/browser-report
var DeviceBrowserName = '(n/a)';
if (UserAgent.contains('Trident') || UserAgent.contains('MSIE')) {
DeviceBrowserName = (UserAgent.contains('Mobile') ? 'IE Mobile' : 'Internet Explorer');
}
if (UserAgent.contains('Firefox') && UserAgent.lacks('Seamonkey')) {
DeviceBrowserName = (UserAgent.contains('Android') ? 'Firefox for Android' : 'Firefox');
}
if (UserAgent.contains('Safari') && UserAgent.lacks('Chrome') &&
UserAgent.lacks('Chromium') && UserAgent.lacks('Android')) {
DeviceBrowserName = (UserAgent.contains('CriOS')
? 'Chrome for iOS'
: (UserAgent.contains('FxiOS') ? 'Firefox for iOS' : 'Safari'));
}
if (UserAgent.contains('Chrome')) {
if (UserAgent.matches(/\bChrome\/[.0-9]* Mobile\b/)) {
DeviceBrowserName = (UserAgent.matches(/\bVersion\/\d+\.\d+\b/) || UserAgent.matches(/\bwv\b/)
? 'WebView on Android'
: 'Chrome for Android');
}
else {
DeviceBrowserName = 'Chrome';
}
}
if (UserAgent.contains('Android') && UserAgent.lacks('Chrome') &&
UserAgent.lacks('Chromium') && UserAgent.lacks('Trident') &&
UserAgent.lacks('Firefox')) {
DeviceBrowserName = 'Android Browser';
}
if (UserAgent.contains('Edge')) {
DeviceBrowserName = 'Edge';
}
if (UserAgent.contains('UCBrowser')) {
DeviceBrowserName = 'UC Browser for Android';
}
if (UserAgent.contains('SamsungBrowser')) {
DeviceBrowserName = 'Samsung Internet';
}
if (UserAgent.contains('OPR') || UserAgent.contains('Opera')) {
DeviceBrowserName = (UserAgent.contains('Opera Mini')
? 'Opera Mini'
: (UserAgent.contains('Opera Mobi') ||
UserAgent.contains('Opera Tablet') ||
UserAgent.contains('Mobile')
? 'Opera Mobile'
: 'Opera'));
}
if (UserAgent.contains('BB10') || UserAgent.contains('PlayBook') || UserAgent.contains('BlackBerry')) {
DeviceBrowserName = 'Blackberry';
}
/**** DeviceBrowserVersion ****/
// based on: https://github.com/keithws/browser-report
var VersionMatch;
switch (DeviceBrowserName) {
case 'Chrome':
case 'Chrome for Android':
case 'WebView for Android':
VersionMatch = UserAgent.match(/Chrome\/((\d+\.)+\d+)/);
break;
case 'Firefox':
case 'Firefox for Android':
VersionMatch = UserAgent.match(/Firefox\/((\d+\.)+\d+)/);
break;
case 'Firefox for iOS':
VersionMatch = UserAgent.match(/FxiOS\/((\d+\.)+\d+)/);
break;
case 'Edge':
case 'Internet Explorer':
case 'IE Mobile':
VersionMatch =
UserAgent.match(/Edge\/((\d+\.)+\d+)/) ||
UserAgent.match(/rv:((\d+\.)+\d+)/) ||
UserAgent.match(/MSIE\ ((\d+\.)+\d+)/);
break;
case 'Safari':
case 'Android Browser':
VersionMatch = UserAgent.match(/Version\/((\d+\.)+\d+)/);
case 'UC Browser for Android':
VersionMatch = UserAgent.match(/UCBrowser\/((\d+\.)+\d+)/);
case 'Samsung Internet':
VersionMatch = UserAgent.match(/SamsungBrowser\/((\d+\.)+\d+)/);
case 'Opera Mini':
VersionMatch = UserAgent.match(/Opera Mini\/((\d+\.)+\d+)/);
case 'Opera':
VersionMatch =
UserAgent.match(/OPR\/((\d+\.)+\d+)/) ||
UserAgent.match(/Version\/((\d+\.)+\d+)/) ||
UserAgent.match(/Opera\/((\d+\.)+\d+)/);
case 'BlackBerry':
VersionMatch = UserAgent.match(/Version\/((\d+\.)+\d+)/);
default:
VersionMatch = UserAgent.match(/\/((\d+\.)+\d+)$/);
}
var DeviceBrowserVersion = (VersionMatch && VersionMatch[1]) || '(n/a)';
/**** DeviceOSName ****/
// based on: https://github.com/keithws/browser-report
var DeviceOSName = '(n/a)';
if (UserAgent.contains('Windows')) {
DeviceOSName = (UserAgent.contains('Windows Phone') ? 'Windows Phone' : 'Windows');
}
if (UserAgent.contains('OS X') && UserAgent.lacks('Android')) {
DeviceOSName = 'macOS';
}
if (UserAgent.contains('Linux') && UserAgent.lacks('Android')) {
DeviceOSName = 'Linux';
}
if (UserAgent.contains('like Mac OS X') && UserAgent.contains('iPhone')) {
DeviceOSName = 'iOS';
}
if (UserAgent.contains('like Mac OS X') && UserAgent.contains('iPad')) {
var VersionMatch_1 = UserAgent.match(/OS ((\d+[._])+\d+) like Mac OS\ X/);
DeviceOSName = (parseInt(VersionMatch_1[1] || '', 10) >= 13 ? 'iPadOS' : 'iOS');
}
if ((UserAgent.contains('Android') || UserAgent.contains('Adr')) &&
UserAgent.lacks('Windows Phone')) {
DeviceOSName = 'Android';
}
if (UserAgent.contains('CrOS')) {
DeviceOSName = 'ChromeOS';
}
if (UserAgent.contains('BB10')) {
DeviceOSName = 'BlackBerry';
}
if (UserAgent.contains('RIM Tablet OS')) {
DeviceOSName = 'BlackBerry Tablet OS';
}
if (UserAgent.contains('BlackBerry')) {
DeviceOSName = 'BlackBerryOS';
}
/**** DeviceOSVersion ****/
// based on: https://github.com/keithws/browser-report
var DeviceOSVersion = '(n/a)';
switch (DeviceOSName) {
case 'Windows':
case 'Windows Phone':
if (UserAgent.contains('Win16')) {
DeviceOSVersion = '3.1.1';
}
else if (UserAgent.contains('Windows CE')) {
DeviceOSVersion = 'CE';
}
else if (UserAgent.contains('Windows 95')) {
DeviceOSVersion = '95';
}
else if (UserAgent.contains('Windows 98')) {
DeviceOSVersion = (UserAgent.contains('Windows 98; Win 9x 4.90')
? 'Millennium Edition'
: '98');
}
else {
VersionMatch = UserAgent.match(/Win(?:dows)?(?: Phone)?[\ _]?(?:(?:NT|9x) )?((?:(\d+\.)*\d+)|XP|ME|CE)\b/);
if (VersionMatch && VersionMatch[1]) {
switch (VersionMatch[1]) {
case '10.0':
case '6.4':
DeviceOSVersion = '10.0';
break;
case '6.3':
DeviceOSVersion = '8.1';
break;
case '6.2':
DeviceOSVersion = '8';
break;
case '6.1':
DeviceOSVersion = '7';
break;
case '6.0':
DeviceOSVersion = 'Vista';
break;
case '5.2':
DeviceOSVersion = 'Server 2003';
break;
case '5.1':
DeviceOSVersion = 'XP';
break;
case '5.01':
DeviceOSVersion = '2000 SP1';
break;
case '5.0':
DeviceOSVersion = '2000';
break;
case '4.0':
DeviceOSVersion = '4.0';
break;
}
}
}
case 'macOS':
VersionMatch = UserAgent.match(/OS X ((\d+[._])+\d+)\b/);
break;
case 'iOS':
case 'iPadOS':
VersionMatch = UserAgent.match(/OS ((\d+[._])+\d+) like Mac OS\ X/);
break;
case 'Android':
VersionMatch = UserAgent.match(/(?:Android|Adr) (\d+([._]\d+)*)/);
break;
case 'ChromeOS':
VersionMatch = UserAgent.match(/(?:CrOS) [^ ]+ ((\d+[._])+\d+)/);
break;
case 'BlackBerry':
case 'BlackBerryOS':
VersionMatch = UserAgent.match(/Version\/((\d+\.)+\d+)/);
break;
case 'BlackBerry Tablet OS':
VersionMatch = UserAgent.match(/RIM Tablet OS ((\d+\.)+\d+)/);
break;
}
if (VersionMatch && VersionMatch[1]) {
DeviceOSVersion = VersionMatch[1].replace(/_/g, '.');
}
var svelteSystemInfo = {
get BrowserName() { return DeviceBrowserName; },
get BrowserVersion() { return DeviceBrowserVersion; },
get OSName() { return DeviceOSName; },
get OSVersion() { return DeviceOSVersion; },
};
export { svelteSystemInfo as default };
//# sourceMappingURL=svelte-system-info.esm.js.map