UNPKG

rb-sdk

Version:

rb client sdk

272 lines (261 loc) 8.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var OS = [['iOS', function (ua) { return (/iP(hone|od|ad)/ ); }], ['Android OS', function (ua) { return (/(Android)/ ); }], ['BlackBerry OS', function (ua) { return (/(BlackBerry)|(BB10)/ ); }], ['Windows Mobile', function (ua) { return (/(IEMobile)/ ); }], ['Amazon OS', function (ua) { return (/(Kindle)/ ); }], ['Windows 3.11', function (ua) { return (/(Win16)/ ); }], ['Windows 95', function (ua) { return (/(Windows 95)|(Win95)|(Windows_95)/ ); }], ['Windows 98', function (ua) { return (/(Windows 98)|(Win98)/ ); }], ['Windows 2000', function (ua) { return (/(Windows NT 5.0)|(Windows 2000)/ ); }], ['Windows XP', function (ua) { return (/(Windows NT 5.1)|(Windows XP)/ ); }], ['Windows Server 2003', function (ua) { return (/(Windows NT 5.2)/ ); }], ['Windows Vista', function (ua) { return (/(Windows NT 6.0)/ ); }], ['Windows 7', function (ua) { return (/(Windows NT 6.1)/ ); }], ['Windows 8', function (ua) { return (/(Windows NT 6.2)/ ); }], ['Windows 8.1', function (ua) { return (/(Windows NT 6.3)/ ); }], ['Windows 10', function (ua) { return (/(Windows NT 10.0)/ ); }], ['Windows ME', function (ua) { return (/(Windows ME)/ ); }], ['Open BSD', function (ua) { return (/(OpenBSD)/ ); }], ['Sun OS', function (ua) { return (/(SunOS)/ ); }], ['Chrome OS', function (ua) { return (/(CrOS)/ ); }], ['Linux', function (ua) { return (/(Linux)|(X11)/ ); }], ['Mac OS', function (ua) { return (/(Mac_PowerPC)|(Macintosh)/ ); }], ['QNX', function (ua) { return (/(QNX)/ ); }], ['BeOS', function (ua) { return (/(BeOS)/ ); }], ['OS/2', function (ua) { return (/(OS\/2)/ ); }]]; var BROWSER = [["micromessenger", /\bmicromessenger\/([\d.]+)/], ["qq", /\bm?qqbrowser\/([0-9.]+)/], ["tt", /\btencenttraveler ([0-9.]+)/], ["weibo", /weibo__([0-9.]+)/], ["uc", function (ua) { if (ua.indexOf("ucbrowser/") >= 0) { return (/\bucbrowser\/([0-9.]+)/ ); } else if (ua.indexOf("ubrowser/") >= 0) { return (/\bubrowser\/([0-9.]+)/ ); } else if (/\buc\/[0-9]/.test(ua)) { return (/\buc\/([0-9.]+)/ ); } else if (ua.indexOf("ucweb") >= 0) { return (/\bucweb([0-9.]+)?/ ); } else { return (/\b(?:ucbrowser|uc)\b/ ); } }], ["360", function (ua) { if (ua.indexOf("360 aphone browser") !== -1) { return (/\b360 aphone browser \(([^\)]+)\)/ ); } return (/\b360(?:se|ee|chrome|browser)\b/ ); }], ["baidu", /\b(?:ba?idubrowser|baiduhd)[ \/]([0-9.x]+)/], ["baiduboxapp", function (ua) { var back = 0; var a; if (/ baiduboxapp\//i.test(ua)) { if (a = /([\d+.]+)_(?:diordna|enohpi)_/.exec(ua)) { a = a[1].split("."); back = a.reverse().join("."); } else if (a = /baiduboxapp\/([\d+.]+)/.exec(ua)) { back = a[1]; } return { version: back }; } return false; }], ["sogou", function (ua) { if (ua.indexOf("sogoumobilebrowser") >= 0) { return (/sogoumobilebrowser\/([0-9.]+)/ ); } else if (ua.indexOf("sogoumse") >= 0) { return true; } return (/ se ([0-9.x]+)/ ); }], ["ali-ap", function (ua) { if (ua.indexOf("aliapp") > 0) { return (/\baliapp\(ap\/([0-9.]+)\)/ ); } else { return (/\balipayclient\/([0-9.]+)\b/ ); } }], ["ali-tb", /\baliapp\(tb\/([0-9.]+)\)/], ["ali-tm", /\baliapp\(tm\/([0-9.]+)\)/], ["tao", /\btaobrowser\/([0-9.]+)/], ["mi", /\bmiuibrowser\/([0-9.]+)/], ["oppo", /\boppobrowser\/([0-9.]+)/], ["vivo", /\bvivobrowser\/([0-9.]+)/], ["meizu", /\bmzbrowser\/([0-9.]+)/], ["nokia", /\bnokiabrowser\/([0-9.]+)/], ["samsung", /\bsamsungbrowser\/([0-9.]+)/], ["maxthon", /\b(?:maxthon|mxbrowser)(?:[ \/]([0-9.]+))?/], ["opera", function (ua) { var re_opera_old = /\bopera.+version\/([0-9.ab]+)/; var re_opera_new = /\bopr\/([0-9.]+)/; return re_opera_old.test(ua) ? re_opera_old : re_opera_new; }], ["edge", /edge\/([0-9.]+)/], ["firefox", /\bfirefox\/([0-9.ab]+)/], ["chrome", / (?:chrome|crios|crmo)\/([0-9.]+)/], ["android", function (ua) { if (ua.indexOf("android") === -1) { return; } return (/\bversion\/([0-9.]+(?: beta)?)/ ); }], ["safari", /\bversion\/([0-9.]+(?: beta)?)(?: mobile(?:\/[a-z0-9]+)?)? safari\//], ["webview", /\bcpu(?: iphone)? os (?:[0-9._]+).+\bapplewebkit\b/]]; var typeOf = function typeOf(type) { return function (object) { return Object.prototype.toString.call(object) === "[object " + type + "]"; }; }; var each = function each(object, factory) { for (var i = 0, l = object.length; i < l; i++) { if (factory.call(object, object[i], i) === false) { break; } } }; var Detector = function () { function Detector(rules) { _classCallCheck(this, Detector); this.rules = rules; } _createClass(Detector, [{ key: '_detect', value: function _detect(name, expression, ua) { var expr = typeOf("Function")(expression) ? expression.call(null, ua) : expression; if (!expr) { return null; } var info = { name: name, version: "0", codename: "" }; if (expr === true) { return info; } else if (typeOf("String")(expr)) { if (ua.indexOf(expr) !== -1) { return info; } } else if (typeOf("Object")(expr)) { if (expr.hasOwnProperty("version")) { info.version = expr.version; } return info; } else if (typeOf("RegExp")(expr)) { var m = expr.exec(ua); if (m) { if (m.length >= 2 && m[1]) { info.version = m[1].replace(/_/g, "."); } return info; } } } }, { key: '_parseItem', value: function _parseItem(ua, patterns, factory, detector) { var self = this; var detected = { name: "na", version: "0" }; each(patterns, function (pattern) { var d = self._detect(pattern[0], pattern[1], ua); if (d) { detected = d; return false; } }); factory.call(detector, detected.name, detected.version); } }, { key: 'parse', value: function parse(ua) { var d = {}; this._parseItem(ua, this.rules.os, function (name, version) { var v = null; try { v = parseFloat(version); } catch (e) {} d.os = { name: name, version: v, fullVersion: version }; }, d); ua = (ua || "").toLowerCase(); this._parseItem(ua, this.rules.browser, function (name, version) { var mode = version; var v = null; try { v = parseFloat(version); } catch (e) {} d.browser = { name: name, version: v, fullVersion: version, fullMode: mode }; }, d); return d; } }]); return Detector; }(); var browserDetector = new Detector({ os: OS, browser: BROWSER }); var browser = null; if (navigator) { var ua = navigator.userAgent + " " + navigator.appVersion + " " + navigator.vendor; browser = browserDetector.parse(ua); } var exportObj = { browserDetector: browserDetector, browser: browser }; exports.default = exportObj;