UNPKG

detect-features

Version:

Detect and report browser and hardware features.

121 lines (114 loc) 201 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("DetectFeatures", [], factory); else if(typeof exports === 'object') exports["DetectFeatures"] = factory(); else root["DetectFeatures"] = factory(); })(typeof self !== 'undefined' ? self : this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /*!******************!*\ !*** ./index.js ***! \******************/ /*! exports provided: register */ /*! all exports used */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"register\"] = register;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__features__ = __webpack_require__(/*! ./features */ 1);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// Features\n\n\nfunction register() {\n\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\tthis.log = false;\n\tthis.element = null;\n\n\t_extends(this, options);\n\n\tvar features = Object(__WEBPACK_IMPORTED_MODULE_0__features__[\"a\" /* getFeatures */])();\n\n\tif (this.log) {\n\t\tconsole.log(features);\n\t}\n\n\tif (this.element) {\n\t\tthis.element.appendChild(document.createTextNode(JSON.stringify(features, null, 2)));\n\t}\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvaW5kZXguanM/MWZkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGZWF0dXJlc1xuaW1wb3J0IHsgZ2V0RmVhdHVyZXMgfSBmcm9tICcuL2ZlYXR1cmVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKG9wdGlvbnMgPSB7fSkge1xuXHR0aGlzLmxvZyA9IGZhbHNlO1xuXHR0aGlzLmVsZW1lbnQgPSBudWxsO1xuXG5cdE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG5cblx0Y29uc3QgZmVhdHVyZXMgPSBnZXRGZWF0dXJlcygpO1xuXG5cdGlmICh0aGlzLmxvZykge1xuXHRcdGNvbnNvbGUubG9nKGZlYXR1cmVzKTtcblx0fVxuXG5cdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoSlNPTi5zdHJpbmdpZnkoZmVhdHVyZXMsIG51bGwsIDIpKSk7XG5cdH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvaW5kZXguanMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n"); /***/ }), /* 1 */ /*!***************************!*\ !*** ./features/index.js ***! \***************************/ /*! exports provided: getFeatures */ /*! exports used: getFeatures */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return getFeatures; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__browserFeatures_getBrowserType__ = __webpack_require__(/*! ./browserFeatures/getBrowserType */ 2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__browserFeatures_getWebGL2Features__ = __webpack_require__(/*! ./browserFeatures/getWebGL2Features */ 7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__browserFeatures_getWebGLFeatures__ = __webpack_require__(/*! ./browserFeatures/getWebGLFeatures */ 8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__browserFeatures_isGamepadSupported__ = __webpack_require__(/*! ./browserFeatures/isGamepadSupported */ 9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__browserFeatures_isIndexedDBSupported__ = __webpack_require__(/*! ./browserFeatures/isIndexedDBSupported */ 10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__browserFeatures_isLocalStorageSupported__ = __webpack_require__(/*! ./browserFeatures/isLocalStorageSupported */ 11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__browserFeatures_isPerformanceSupported__ = __webpack_require__(/*! ./browserFeatures/isPerformanceSupported */ 12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__browserFeatures_isRequestIdleCallbackSupported__ = __webpack_require__(/*! ./browserFeatures/isRequestIdleCallbackSupported */ 13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__browserFeatures_isServiceWorkerSupported__ = __webpack_require__(/*! ./browserFeatures/isServiceWorkerSupported */ 14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__browserFeatures_isWebAssemblySupported__ = __webpack_require__(/*! ./browserFeatures/isWebAssemblySupported */ 15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__browserFeatures_isWebAudioSupported__ = __webpack_require__(/*! ./browserFeatures/isWebAudioSupported */ 16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__browserFeatures_isWebGL2Supported__ = __webpack_require__(/*! ./browserFeatures/isWebGL2Supported */ 17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__browserFeatures_isWebGLSupported__ = __webpack_require__(/*! ./browserFeatures/isWebGLSupported */ 18);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__browserFeatures_isWebRTCSupported__ = __webpack_require__(/*! ./browserFeatures/isWebRTCSupported */ 19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__browserFeatures_isWebSocketSupported__ = __webpack_require__(/*! ./browserFeatures/isWebSocketSupported */ 20);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__browserFeatures_isWebVRSupported__ = __webpack_require__(/*! ./browserFeatures/isWebVRSupported */ 21);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__browserFeatures_isWebWorkerSupported__ = __webpack_require__(/*! ./browserFeatures/isWebWorkerSupported */ 22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__browserFeatures_isWebXRSupported__ = __webpack_require__(/*! ./browserFeatures/isWebXRSupported */ 23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__browserSettings_isCookieEnabled__ = __webpack_require__(/*! ./browserSettings/isCookieEnabled */ 24);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__browserSettings_isDoNotTrackEnabled__ = __webpack_require__(/*! ./browserSettings/isDoNotTrackEnabled */ 25);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__hardwareFeatures_getDevicePixelRatio__ = __webpack_require__(/*! ./hardwareFeatures/getDevicePixelRatio */ 26);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__hardwareFeatures_getEndianness__ = __webpack_require__(/*! ./hardwareFeatures/getEndianness */ 27);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__hardwareFeatures_getScreenSize__ = __webpack_require__(/*! ./hardwareFeatures/getScreenSize */ 28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__hardwareFeatures_getWebWorkerPoolSize__ = __webpack_require__(/*! ./hardwareFeatures/getWebWorkerPoolSize */ 29);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__hardwareFeatures_getWindowSize__ = __webpack_require__(/*! ./hardwareFeatures/getWindowSize */ 30);\n// Browser features\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Browser settings\n\n\n\n// Hardware features\n\n\n\n\n\n\n// Features\nvar getFeatures = function getFeatures() {\n\t// Default features\n\tvar features = {\n\t\t// Browser features\n\t\tbrowserFeatures: {\n\t\t\tbrowserType: __WEBPACK_IMPORTED_MODULE_0__browserFeatures_getBrowserType__[\"a\" /* default */],\n\t\t\tisGamepadSupported: __WEBPACK_IMPORTED_MODULE_3__browserFeatures_isGamepadSupported__[\"a\" /* default */],\n\t\t\tisIndexedDBSupported: __WEBPACK_IMPORTED_MODULE_4__browserFeatures_isIndexedDBSupported__[\"a\" /* default */],\n\t\t\tisLocalStorageSupported: __WEBPACK_IMPORTED_MODULE_5__browserFeatures_isLocalStorageSupported__[\"a\" /* default */],\n\t\t\tisPerformanceSupported: __WEBPACK_IMPORTED_MODULE_6__browserFeatures_isPerformanceSupported__[\"a\" /* default */],\n\t\t\tisRequestIdleCallbackSupported: __WEBPACK_IMPORTED_MODULE_7__browserFeatures_isRequestIdleCallbackSupported__[\"a\" /* default */],\n\t\t\tisServiceWorkerSupported: __WEBPACK_IMPORTED_MODULE_8__browserFeatures_isServiceWorkerSupported__[\"a\" /* default */],\n\t\t\tisWebAssemblySupported: __WEBPACK_IMPORTED_MODULE_9__browserFeatures_isWebAssemblySupported__[\"a\" /* default */],\n\t\t\tisWebAudioSupported: __WEBPACK_IMPORTED_MODULE_10__browserFeatures_isWebAudioSupported__[\"a\" /* default */],\n\t\t\tisWebGL2Supported: __WEBPACK_IMPORTED_MODULE_11__browserFeatures_isWebGL2Supported__[\"a\" /* default */],\n\t\t\tisWebGLSupported: __WEBPACK_IMPORTED_MODULE_12__browserFeatures_isWebGLSupported__[\"a\" /* default */],\n\t\t\tisWebRTCSupported: __WEBPACK_IMPORTED_MODULE_13__browserFeatures_isWebRTCSupported__[\"a\" /* default */],\n\t\t\tisWebSocketSupported: __WEBPACK_IMPORTED_MODULE_14__browserFeatures_isWebSocketSupported__[\"a\" /* default */],\n\t\t\tisWebVRSupported: __WEBPACK_IMPORTED_MODULE_15__browserFeatures_isWebVRSupported__[\"a\" /* default */],\n\t\t\tisWebWorkerSupported: __WEBPACK_IMPORTED_MODULE_16__browserFeatures_isWebWorkerSupported__[\"a\" /* default */],\n\t\t\tisWebXRSupported: __WEBPACK_IMPORTED_MODULE_17__browserFeatures_isWebXRSupported__[\"a\" /* default */],\n\n\t\t\twebGL2Features: __WEBPACK_IMPORTED_MODULE_1__browserFeatures_getWebGL2Features__[\"a\" /* default */],\n\t\t\twebGLFeatures: __WEBPACK_IMPORTED_MODULE_2__browserFeatures_getWebGLFeatures__[\"a\" /* default */]\n\t\t},\n\n\t\t// Browser settings\n\t\tbrowserSettings: {\n\t\t\tisCookieEnabled: __WEBPACK_IMPORTED_MODULE_18__browserSettings_isCookieEnabled__[\"a\" /* default */],\n\t\t\tisDoNotTrackEnabled: __WEBPACK_IMPORTED_MODULE_19__browserSettings_isDoNotTrackEnabled__[\"a\" /* default */]\n\t\t},\n\n\t\t// Hardware features\n\t\thardwareFeatures: {\n\t\t\tdevicePixelRatio: __WEBPACK_IMPORTED_MODULE_20__hardwareFeatures_getDevicePixelRatio__[\"a\" /* default */],\n\t\t\tendianness: __WEBPACK_IMPORTED_MODULE_21__hardwareFeatures_getEndianness__[\"a\" /* default */],\n\t\t\tscreenSize: __WEBPACK_IMPORTED_MODULE_22__hardwareFeatures_getScreenSize__[\"a\" /* default */].toString(),\n\t\t\tworkerPoolSize: __WEBPACK_IMPORTED_MODULE_23__hardwareFeatures_getWebWorkerPoolSize__[\"a\" /* default */],\n\t\t\twindowSize: __WEBPACK_IMPORTED_MODULE_24__hardwareFeatures_getWindowSize__[\"a\" /* default */].toString()\n\t\t}\n\t};\n\n\treturn features;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZmVhdHVyZXMvaW5kZXguanM/NzM1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCcm93c2VyIGZlYXR1cmVzXG5pbXBvcnQgZ2V0QnJvd3NlclR5cGUgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvZ2V0QnJvd3NlclR5cGUnO1xuaW1wb3J0IGdldFdlYkdMMkZlYXR1cmVzIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2dldFdlYkdMMkZlYXR1cmVzJztcbmltcG9ydCBnZXRXZWJHTEZlYXR1cmVzIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2dldFdlYkdMRmVhdHVyZXMnO1xuaW1wb3J0IGlzR2FtZXBhZFN1cHBvcnRlZCBmcm9tICcuL2Jyb3dzZXJGZWF0dXJlcy9pc0dhbWVwYWRTdXBwb3J0ZWQnO1xuaW1wb3J0IGlzSW5kZXhlZERCU3VwcG9ydGVkIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2lzSW5kZXhlZERCU3VwcG9ydGVkJztcbmltcG9ydCBpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCBmcm9tICcuL2Jyb3dzZXJGZWF0dXJlcy9pc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCc7XG5pbXBvcnQgaXNQZXJmb3JtYW5jZVN1cHBvcnRlZCBmcm9tICcuL2Jyb3dzZXJGZWF0dXJlcy9pc1BlcmZvcm1hbmNlU3VwcG9ydGVkJztcbmltcG9ydCBpc1JlcXVlc3RJZGxlQ2FsbGJhY2tTdXBwb3J0ZWQgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvaXNSZXF1ZXN0SWRsZUNhbGxiYWNrU3VwcG9ydGVkJztcbmltcG9ydCBpc1NlcnZpY2VXb3JrZXJTdXBwb3J0ZWQgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvaXNTZXJ2aWNlV29ya2VyU3VwcG9ydGVkJztcbmltcG9ydCBpc1dlYkFzc2VtYmx5U3VwcG9ydGVkIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2lzV2ViQXNzZW1ibHlTdXBwb3J0ZWQnO1xuaW1wb3J0IGlzV2ViQXVkaW9TdXBwb3J0ZWQgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvaXNXZWJBdWRpb1N1cHBvcnRlZCc7XG5pbXBvcnQgaXNXZWJHTDJTdXBwb3J0ZWQgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvaXNXZWJHTDJTdXBwb3J0ZWQnO1xuaW1wb3J0IGlzV2ViR0xTdXBwb3J0ZWQgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvaXNXZWJHTFN1cHBvcnRlZCc7XG5pbXBvcnQgaXNXZWJSVENTdXBwb3J0ZWQgZnJvbSAnLi9icm93c2VyRmVhdHVyZXMvaXNXZWJSVENTdXBwb3J0ZWQnO1xuaW1wb3J0IGlzV2ViU29ja2V0U3VwcG9ydGVkIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2lzV2ViU29ja2V0U3VwcG9ydGVkJztcbmltcG9ydCBpc1dlYlZSU3VwcG9ydGVkIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2lzV2ViVlJTdXBwb3J0ZWQnO1xuaW1wb3J0IGlzV2ViV29ya2VyU3VwcG9ydGVkIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2lzV2ViV29ya2VyU3VwcG9ydGVkJztcbmltcG9ydCBpc1dlYlhSU3VwcG9ydGVkIGZyb20gJy4vYnJvd3NlckZlYXR1cmVzL2lzV2ViWFJTdXBwb3J0ZWQnO1xuXG4vLyBCcm93c2VyIHNldHRpbmdzXG5pbXBvcnQgaXNDb29raWVFbmFibGVkIGZyb20gJy4vYnJvd3NlclNldHRpbmdzL2lzQ29va2llRW5hYmxlZCc7XG5pbXBvcnQgaXNEb05vdFRyYWNrRW5hYmxlZCBmcm9tICcuL2Jyb3dzZXJTZXR0aW5ncy9pc0RvTm90VHJhY2tFbmFibGVkJztcblxuLy8gSGFyZHdhcmUgZmVhdHVyZXNcbmltcG9ydCBnZXREZXZpY2VQaXhlbFJhdGlvIGZyb20gJy4vaGFyZHdhcmVGZWF0dXJlcy9nZXREZXZpY2VQaXhlbFJhdGlvJztcbmltcG9ydCBnZXRFbmRpYW5uZXNzIGZyb20gJy4vaGFyZHdhcmVGZWF0dXJlcy9nZXRFbmRpYW5uZXNzJztcbmltcG9ydCBnZXRTY3JlZW5TaXplIGZyb20gJy4vaGFyZHdhcmVGZWF0dXJlcy9nZXRTY3JlZW5TaXplJztcbmltcG9ydCBnZXRXZWJXb3JrZXJQb29sU2l6ZSBmcm9tICcuL2hhcmR3YXJlRmVhdHVyZXMvZ2V0V2ViV29ya2VyUG9vbFNpemUnO1xuaW1wb3J0IGdldFdpbmRvd1NpemUgZnJvbSAnLi9oYXJkd2FyZUZlYXR1cmVzL2dldFdpbmRvd1NpemUnO1xuXG4vLyBGZWF0dXJlc1xuZXhwb3J0IGNvbnN0IGdldEZlYXR1cmVzID0gKCkgPT4ge1xuXHQvLyBEZWZhdWx0IGZlYXR1cmVzXG5cdGNvbnN0IGZlYXR1cmVzID0ge1xuXHRcdC8vIEJyb3dzZXIgZmVhdHVyZXNcblx0XHRicm93c2VyRmVhdHVyZXM6IHtcblx0XHRcdGJyb3dzZXJUeXBlOiBnZXRCcm93c2VyVHlwZSxcblx0XHRcdGlzR2FtZXBhZFN1cHBvcnRlZCxcblx0XHRcdGlzSW5kZXhlZERCU3VwcG9ydGVkLFxuXHRcdFx0aXNMb2NhbFN0b3JhZ2VTdXBwb3J0ZWQsXG5cdFx0XHRpc1BlcmZvcm1hbmNlU3VwcG9ydGVkLFxuXHRcdFx0aXNSZXF1ZXN0SWRsZUNhbGxiYWNrU3VwcG9ydGVkLFxuXHRcdFx0aXNTZXJ2aWNlV29ya2VyU3VwcG9ydGVkLFxuXHRcdFx0aXNXZWJBc3NlbWJseVN1cHBvcnRlZCxcblx0XHRcdGlzV2ViQXVkaW9TdXBwb3J0ZWQsXG5cdFx0XHRpc1dlYkdMMlN1cHBvcnRlZCxcblx0XHRcdGlzV2ViR0xTdXBwb3J0ZWQsXG5cdFx0XHRpc1dlYlJUQ1N1cHBvcnRlZCxcblx0XHRcdGlzV2ViU29ja2V0U3VwcG9ydGVkLFxuXHRcdFx0aXNXZWJWUlN1cHBvcnRlZCxcblx0XHRcdGlzV2ViV29ya2VyU3VwcG9ydGVkLFxuXHRcdFx0aXNXZWJYUlN1cHBvcnRlZCxcblxuXHRcdFx0d2ViR0wyRmVhdHVyZXM6IGdldFdlYkdMMkZlYXR1cmVzLFxuXHRcdFx0d2ViR0xGZWF0dXJlczogZ2V0V2ViR0xGZWF0dXJlcyxcblx0XHR9LFxuXG5cdFx0Ly8gQnJvd3NlciBzZXR0aW5nc1xuXHRcdGJyb3dzZXJTZXR0aW5nczoge1xuXHRcdFx0aXNDb29raWVFbmFibGVkLFxuXHRcdFx0aXNEb05vdFRyYWNrRW5hYmxlZCxcblx0XHR9LFxuXG5cdFx0Ly8gSGFyZHdhcmUgZmVhdHVyZXNcblx0XHRoYXJkd2FyZUZlYXR1cmVzOiB7XG5cdFx0XHRkZXZpY2VQaXhlbFJhdGlvOiBnZXREZXZpY2VQaXhlbFJhdGlvLFxuXHRcdFx0ZW5kaWFubmVzczogZ2V0RW5kaWFubmVzcyxcblx0XHRcdHNjcmVlblNpemU6IGdldFNjcmVlblNpemUudG9TdHJpbmcoKSxcblx0XHRcdHdvcmtlclBvb2xTaXplOiBnZXRXZWJXb3JrZXJQb29sU2l6ZSxcblx0XHRcdHdpbmRvd1NpemU6IGdldFdpbmRvd1NpemUudG9TdHJpbmcoKSxcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiBmZWF0dXJlcztcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2luZGV4LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUEvQkE7QUFDQTtBQXVDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n"); /***/ }), /* 2 */ /*!****************************************************!*\ !*** ./features/browserFeatures/getBrowserType.js ***! \****************************************************/ /*! exports provided: default */ /*! exports used: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_ua_parser_js__ = __webpack_require__(/*! ua-parser-js */ 3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_ua_parser_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_ua_parser_js__);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ((function () {\n var userAgentParser = new __WEBPACK_IMPORTED_MODULE_0_ua_parser_js___default.a();\n var userAgent = userAgentParser.getResult();\n\n var features = {\n browserEngineName: userAgent.engine.name || 'Unknown',\n browserEngineVersion: userAgent.engine.version || 'Unknown',\n browserName: userAgent.browser.name || 'Unknown',\n browserVersion: userAgent.browser.version || 'Unknown',\n deviceModel: userAgent.device.model || 'Unknown',\n deviceType: userAgent.device.type || 'Unknown',\n deviceVendor: userAgent.device.vendor || 'Unknown',\n operatingSystemName: userAgent.os.name || 'Unknown',\n operatingSystemVersion: userAgent.os.version || 'Unknown'\n };\n\n return features;\n})());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZmVhdHVyZXMvYnJvd3NlckZlYXR1cmVzL2dldEJyb3dzZXJUeXBlLmpzPzgzMDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVBUGFyc2VyIGZyb20gJ3VhLXBhcnNlci1qcyc7XG5cbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiB7XG4gICAgY29uc3QgdXNlckFnZW50UGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG4gICAgY29uc3QgdXNlckFnZW50ID0gdXNlckFnZW50UGFyc2VyLmdldFJlc3VsdCgpO1xuXG4gICAgY29uc3QgZmVhdHVyZXMgPSB7XG4gICAgICAgIGJyb3dzZXJFbmdpbmVOYW1lOiB1c2VyQWdlbnQuZW5naW5lLm5hbWUgfHwgJ1Vua25vd24nLFxuICAgICAgICBicm93c2VyRW5naW5lVmVyc2lvbjogdXNlckFnZW50LmVuZ2luZS52ZXJzaW9uIHx8ICdVbmtub3duJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6IHVzZXJBZ2VudC5icm93c2VyLm5hbWUgfHwgJ1Vua25vd24nLFxuICAgICAgICBicm93c2VyVmVyc2lvbjogdXNlckFnZW50LmJyb3dzZXIudmVyc2lvbiB8fCAnVW5rbm93bicsXG4gICAgICAgIGRldmljZU1vZGVsOiB1c2VyQWdlbnQuZGV2aWNlLm1vZGVsIHx8ICdVbmtub3duJyxcbiAgICAgICAgZGV2aWNlVHlwZTogdXNlckFnZW50LmRldmljZS50eXBlIHx8ICdVbmtub3duJyxcbiAgICAgICAgZGV2aWNlVmVuZG9yOiB1c2VyQWdlbnQuZGV2aWNlLnZlbmRvciB8fCAnVW5rbm93bicsXG4gICAgICAgIG9wZXJhdGluZ1N5c3RlbU5hbWU6IHVzZXJBZ2VudC5vcy5uYW1lIHx8ICdVbmtub3duJyxcbiAgICAgICAgb3BlcmF0aW5nU3lzdGVtVmVyc2lvbjogdXNlckFnZW50Lm9zLnZlcnNpb24gfHwgJ1Vua25vd24nLFxuICAgIH07XG5cbiAgICByZXR1cm4gZmVhdHVyZXM7XG59KSgpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy9icm93c2VyRmVhdHVyZXMvZ2V0QnJvd3NlclR5cGUuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2\n"); /***/ }), /* 3 */ /*!*****************************************************!*\ !*** ../node_modules/ua-parser-js/src/ua-parser.js ***! \*****************************************************/ /*! dynamic exports provided */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * UAParser.js v0.7.17\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>\n * Dual licensed under GPLv2 & MIT\n */\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.17',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE = 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend: function extend(regexes, extensions) {\n var margedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n margedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n margedRegexes[i] = regexes[i];\n }\n }\n return margedRegexes;\n },\n has: function has(str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize: function lowerize(str) {\n return str.toLowerCase();\n },\n major: function major(version) {\n return (typeof version === 'undefined' ? 'undefined' : _typeof(version)) === STR_TYPE ? version.replace(/[^\\d\\.]/g, '').split(\".\")[0] : undefined;\n },\n trim: function trim(str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx: function rgx(ua, arrays) {\n\n //var result = {},\n var i = 0,\n j,\n k,\n p,\n q,\n matches,\n match; //, args = arguments;\n\n /*// construct object barebones\n for (p = 0; p < args[1].length; p++) {\n q = args[1][p];\n result[typeof q === OBJ_TYPE ? q[0] : q] = undefined;\n }*/\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i],\n // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if ((typeof q === 'undefined' ? 'undefined' : _typeof(q)) === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (_typeof(q[1]) == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (_typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n // console.log(this);\n //return this;\n },\n\n str: function str(_str, map) {\n\n for (var i in map) {\n // check if array\n if (_typeof(map[i]) === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], _str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n } else if (util.has(map[i], _str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n return _str;\n }\n };\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser: {\n oldsafari: {\n version: {\n '1.0': '/8',\n '1.2': '/1',\n '1.3': '/3',\n '2.0': '/412',\n '2.0.2': '/416',\n '2.0.3': '/417',\n '2.0.4': '/419',\n '?': '/'\n }\n }\n },\n\n device: {\n amazon: {\n model: {\n 'Fire Phone': ['SD', 'KF']\n }\n },\n sprint: {\n model: {\n 'Evo Shift 4G': '7373KT'\n },\n vendor: {\n 'HTC': 'APA',\n 'Sprint': 'Sprint'\n }\n }\n },\n\n os: {\n windows: {\n version: {\n 'ME': '4.90',\n 'NT 3.11': 'NT3.51',\n 'NT 4.0': 'NT4.0',\n '2000': 'NT 5.0',\n 'XP': ['NT 5.1', 'NT 5.2'],\n 'Vista': 'NT 6.0',\n '7': 'NT 6.1',\n '8': 'NT 6.2',\n '8.1': 'NT 6.3',\n '10': ['NT 6.4', 'NT 10.0'],\n 'RT': 'ARM'\n }\n }\n }\n };\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser: [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [/(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [/\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]+)*/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n\n // Trident based\n /(avant\\s|iemobile|slim|baidu)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser/Baidu\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]+)*/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser\n ], [NAME, VERSION], [/(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [/(edge)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [NAME, VERSION], [/(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [/(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [/((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i\n // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [/(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [/(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [/(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [/m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [/xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [/;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [/headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [/\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [/((?:oculus|samsung)browser)\\/([\\w\\.]+)/i], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [// Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [/(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [/(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [/((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [/(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [/fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [/version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [/version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [/webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [/webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [/(konqueror)\\/([\\w\\.]+)/i, // Konqueror\n /(webkit|khtml)\\/([\\w\\.]+)/i], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [/(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\\/([\\w\\.-]+)/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]+)*/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n\n /* /////////////////////\n // Media players BEGIN\n ////////////////////////\n , [\n /(apple(?:coremedia|))\\/((\\d+)[\\w\\._]+)/i, // Generic Apple CoreMedia\n /(coremedia) v((\\d+)[\\w\\._]+)/i\n ], [NAME, VERSION], [\n /(aqualung|lyssna|bsplayer)\\/((\\d+)?[\\w\\.-]+)/i // Aqualung/Lyssna/BSPlayer\n ], [NAME, VERSION], [\n /(ares|ossproxy)\\s((\\d+)[\\w\\.-]+)/i // Ares/OSSProxy\n ], [NAME, VERSION], [\n /(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\\/((\\d+)[\\w\\.-]+)/i,\n // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC\n // NSPlayer/PSP-InternetRadioPlayer/Videos\n /(clementine|music player daemon)\\s((\\d+)[\\w\\.-]+)/i, // Clementine/MPD\n /(lg player|nexplayer)\\s((\\d+)[\\d\\.]+)/i,\n /player\\/(nexplayer|lg player)\\s((\\d+)[\\w\\.-]+)/i // NexPlayer/LG Player\n ], [NAME, VERSION], [\n /(nexplayer)\\s((\\d+)[\\w\\.-]+)/i // Nexplayer\n ], [NAME, VERSION], [\n /(flrp)\\/((\\d+)[\\w\\.-]+)/i // Flip Player\n ], [[NAME, 'Flip Player'], VERSION], [\n /(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i\n // FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit\n ], [NAME], [\n /(gstreamer) souphttpsrc (?:\\([^\\)]+\\)){0,1} libsoup\\/((\\d+)[\\w\\.-]+)/i\n // Gstreamer\n ], [NAME, VERSION], [\n /(htc streaming player)\\s[\\w_]+\\s\\/\\s((\\d+)[\\d\\.]+)/i, // HTC Streaming Player\n /(java|python-urllib|python-requests|wget|libcurl)\\/((\\d+)[\\w\\.-_]+)/i,\n // Java/urllib/requests/wget/cURL\n /(lavf)((\\d+)[\\d\\.]+)/i // Lavf (FFMPEG)\n ], [NAME, VERSION], [\n /(htc_one_s)\\/((\\d+)[\\d\\.]+)/i // HTC One S\n ], [[NAME, /_/g, ' '], VERSION], [\n /(mplayer)(?:\\s|\\/)(?:(?:sherpya-){0,1}svn)(?:-|\\s)(r\\d+(?:-\\d+[\\w\\.-]+){0,1})/i\n // MPlayer SVN\n ], [NAME, VERSION], [\n /(mplayer)(?:\\s|\\/|[unkow-]+)((\\d+)[\\w\\.-]+)/i // MPlayer\n ], [NAME, VERSION], [\n /(mplayer)/i, // MPlayer (no other info)\n /(yourmuze)/i, // YourMuze\n /(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime\n ], [NAME], [\n /(nero (?:home|scout))\\/((\\d+)[\\w\\.-]+)/i // Nero Home/Nero Scout\n ], [NAME, VERSION], [\n /(nokia\\d+)\\/((\\d+)[\\w\\.-]+)/i // Nokia\n ], [NAME, VERSION], [\n /\\s(songbird)\\/((\\d+)[\\w\\.-]+)/i // Songbird/Philips-Songbird\n ], [NAME, VERSION], [\n /(winamp)3 version ((\\d+)[\\w\\.-]+)/i, // Winamp\n /(winamp)\\s((\\d+)[\\w\\.-]+)/i,\n /(winamp)mpeg\\/((\\d+)[\\w\\.-]+)/i\n ], [NAME, VERSION], [\n /(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)\n // inlight radio\n ], [NAME], [\n /(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\\/((\\d+)[\\w\\.-]+)/i\n // QuickTime/RealMedia/RadioApp/RadioClientApplication/\n // SoundTap/Totem/Stagefright/Streamium\n ], [NAME, VERSION], [\n /(smp)((\\d+)[\\d\\.]+)/i // SMP\n ], [NAME, VERSION], [\n /(vlc) media player - version ((\\d+)[\\w\\.]+)/i, // VLC Videolan\n /(vlc)\\/((\\d+)[\\w\\.-]+)/i,\n /(xbmc|gvfs|xine|xmms|irapp)\\/((\\d+)[\\w\\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp\n /(foobar2000)\\/((\\d+)[\\d\\.]+)/i, // Foobar2000\n /(itunes)\\/((\\d+)[\\d\\.]+)/i // iTunes\n ], [NAME, VERSION], [\n /(wmplayer)\\/((\\d+)[\\w\\.-]+)/i, // Windows Media Player\n /(windows-media-player)\\/((\\d+)[\\w\\.-]+)/i\n ], [[NAME, /-/g, ' '], VERSION], [\n /windows\\/((\\d+)[\\w\\.-]+) upnp\\/[\\d\\.]+ dlnadoc\\/[\\d\\.]+ (home media server)/i\n // Windows Media Server\n ], [VERSION, [NAME, 'Windows']], [\n /(com\\.riseupradioalarm)\\/((\\d+)[\\d\\.]*)/i // RiseUP Radio Alarm\n ], [NAME, VERSION], [\n /(rad.io)\\s((\\d+)[\\d\\.]+)/i, // Rad.io\n /(radio.(?:de|at|fr))\\s((\\d+)[\\d\\.]+)/i\n ], [[NAME, 'rad.io'], VERSION]\n //////////////////////\n // Media players END\n ////////////////////*/\n\n ],\n\n cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [/(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [/((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i], [[ARCHITECTURE, 'arm']], [/((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [/(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [/((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+;))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]],\n\n device: [[/\\((ipad|playbook);[\\w\\s\\);-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [/applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [/(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [/(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [/(kf[A-z]+)\\sbuild\\/[\\w\\.]+.*silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [/(sd|kf)[0349hijorstuw]+\\sbuild\\/[\\w\\.]+.*silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [/\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [/\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [/(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]+)*/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [/\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone)/i], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [/(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [/android.+\\s([c-g]\\d{4}|so[-l]\\w+)\\sbuild\\//i], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [/\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [/android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [/(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [/(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [/(lenovo)\\s?(S(?:5000|6000)+(?:[-][\\w+]))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [/(htc)[;_\\s-]+([\\w\\s]+(?=\\))|\\w+)*/i, // HTC\n /(zte)-(\\w+)*/i, // ZTE\n /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]+)*/i\n // Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [/(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [/d\\/huawei([\\w\\s-]+)[;\\)]/i, /(nexus\\s6p)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [/(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [/[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [/(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?(:?\\s4g)?)[\\w\\s]+build\\//i, /mot[\\s-]?(\\w+)*/i, /(XT\\d{3,4}) build\\//i, /(nexus\\s6)/i], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [/android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [/hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [/hbbtv.+maple;(\\d+)/i], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [/\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [/android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i, /((SM-T\\w+))/i], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [// Samsung\n /smart-tv.+(samsung)/i], [VENDOR, [TYPE, SMARTTV], MODEL], [/((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i, /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)*/i, /sec-((sgh\\w+))/i], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [/sie-(\\w+)*/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [/(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]+)*/i], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [/android\\s3\\.[\\s\\w;-]{10}(a\\d{3})/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [/android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [/android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [/(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [/(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w+)*/i, /android.+lg(\\-?[\\d\\w]+)\\s+build/i], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [/android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [/linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [/((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [/android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [/crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [/android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [/android.+;\\s(pixel c)\\s/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [/android.+;\\s(pixel xl|pixel)\\s/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [/android.+(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [/android.+(mi[\\s\\-_]*(?:pad)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Mi Pad tablets\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [/android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu Tablet\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [/android.+a000(1)\\s+build/i // OnePlus\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [/android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [/android.+[;\\/]\\s*(Venue[\\d\\s]*)\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [/android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [/android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [/android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [/android.+[;\\/]\\s*(zte)?.+(k\\d{2})\\s+build/i // ZTE K Series Tablet\n ], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [/android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [/android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [/android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [/(android).+[;\\/]\\s+([YR]\\d{2}x?.*)\\s+build/i, /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(.+)\\s+build/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [/android.+[;\\/]\\s*(NS-?.+)\\s+build/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [/android.+[;\\/]\\s*((NX|Next)-?.+)\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [/android.+[;\\/]\\s*(Xtreme\\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [// Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-?)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [/android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [/android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(.*\\b)\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [/android.+[;\\/]\\s*(Trio[\\s\\-