Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.28 KB | None | 0 0
  1. "use strict";
  2. var __spreadArrays = (this && this.__spreadArrays) || function () {
  3. for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  4. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  5. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  6. r[k] = a[j];
  7. return r;
  8. };
  9. Object.defineProperty(exports, "__esModule", { value: true });
  10. var BrowserInfo = /** @class */ (function () {
  11. function BrowserInfo(name, version, os) {
  12. this.name = name;
  13. this.version = version;
  14. this.os = os;
  15. }
  16. return BrowserInfo;
  17. }());
  18. exports.BrowserInfo = BrowserInfo;
  19. var NodeInfo = /** @class */ (function () {
  20. function NodeInfo(version) {
  21. this.version = version;
  22. this.name = 'node';
  23. this.os = process.platform;
  24. }
  25. return NodeInfo;
  26. }());
  27. exports.NodeInfo = NodeInfo;
  28. var BotInfo = /** @class */ (function () {
  29. function BotInfo() {
  30. this.bot = true; // NOTE: deprecated test name instead
  31. this.name = 'bot';
  32. this.version = null;
  33. this.os = null;
  34. }
  35. return BotInfo;
  36. }());
  37. exports.BotInfo = BotInfo;
  38. // tslint:disable-next-line:max-line-length
  39. var SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;
  40. var SEARCHBOT_OS_REGEX = /(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\/Teoma)|(ia_archiver)/;
  41. var REQUIRED_VERSION_PARTS = 3;
  42. var userAgentRules = [
  43. ['aol', /AOLShield\/([0-9\._]+)/],
  44. ['edge', /Edge\/([0-9\._]+)/],
  45. ['edge-ios', /EdgiOS\/([0-9\._]+)/],
  46. ['yandexbrowser', /YaBrowser\/([0-9\._]+)/],
  47. ['vivaldi', /Vivaldi\/([0-9\.]+)/],
  48. ['kakaotalk', /KAKAOTALK\s([0-9\.]+)/],
  49. ['samsung', /SamsungBrowser\/([0-9\.]+)/],
  50. ['silk', /\bSilk\/([0-9._-]+)\b/],
  51. ['miui', /MiuiBrowser\/([0-9\.]+)$/],
  52. ['beaker', /BeakerBrowser\/([0-9\.]+)/],
  53. ['edge-chromium', /Edg\/([0-9\.]+)/],
  54. [
  55. 'chromium-webview',
  56. /(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/,
  57. ],
  58. ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],
  59. ['phantomjs', /PhantomJS\/([0-9\.]+)(:?\s|$)/],
  60. ['crios', /CriOS\/([0-9\.]+)(:?\s|$)/],
  61. ['firefox', /Firefox\/([0-9\.]+)(?:\s|$)/],
  62. ['fxios', /FxiOS\/([0-9\.]+)/],
  63. ['opera-mini', /Opera Mini.*Version\/([0-9\.]+)/],
  64. ['opera', /Opera\/([0-9\.]+)(?:\s|$)/],
  65. ['opera', /OPR\/([0-9\.]+)(:?\s|$)/],
  66. ['ie', /Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],
  67. ['ie', /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],
  68. ['ie', /MSIE\s(7\.0)/],
  69. ['bb10', /BB10;\sTouch.*Version\/([0-9\.]+)/],
  70. ['android', /Android\s([0-9\.]+)/],
  71. ['ios', /Version\/([0-9\._]+).*Mobile.*Safari.*/],
  72. ['safari', /Version\/([0-9\._]+).*Safari/],
  73. ['facebook', /FBAV\/([0-9\.]+)/],
  74. ['instagram', /Instagram\s([0-9\.]+)/],
  75. ['ios-webview', /AppleWebKit\/([0-9\.]+).*Mobile/],
  76. ['ios-webview', /AppleWebKit\/([0-9\.]+).*Gecko\)$/],
  77. ['searchbot', SEARCHBOX_UA_REGEX],
  78. ];
  79. var operatingSystemRules = [
  80. ['iOS', /iP(hone|od|ad)/],
  81. ['Android OS', /Android/],
  82. ['BlackBerry OS', /BlackBerry|BB10/],
  83. ['Windows Mobile', /IEMobile/],
  84. ['Amazon OS', /Kindle/],
  85. ['Windows 3.11', /Win16/],
  86. ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],
  87. ['Windows 98', /(Windows 98)|(Win98)/],
  88. ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],
  89. ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],
  90. ['Windows Server 2003', /(Windows NT 5.2)/],
  91. ['Windows Vista', /(Windows NT 6.0)/],
  92. ['Windows 7', /(Windows NT 6.1)/],
  93. ['Windows 8', /(Windows NT 6.2)/],
  94. ['Windows 8.1', /(Windows NT 6.3)/],
  95. ['Windows 10', /(Windows NT 10.0)/],
  96. ['Windows ME', /Windows ME/],
  97. ['Open BSD', /OpenBSD/],
  98. ['Sun OS', /SunOS/],
  99. ['Chrome OS', /CrOS/],
  100. ['Linux', /(Linux)|(X11)/],
  101. ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],
  102. ['QNX', /QNX/],
  103. ['BeOS', /BeOS/],
  104. ['OS/2', /OS\/2/],
  105. ['Search Bot', SEARCHBOT_OS_REGEX],
  106. ];
  107. function detect(userAgent) {
  108. if (!!userAgent) {
  109. return parseUserAgent(userAgent);
  110. }
  111. if (typeof navigator !== 'undefined') {
  112. return parseUserAgent(navigator.userAgent);
  113. }
  114. return getNodeVersion();
  115. }
  116. exports.detect = detect;
  117. function parseUserAgent(ua) {
  118. // opted for using reduce here rather than Array#first with a regex.test call
  119. // this is primarily because using the reduce we only perform the regex
  120. // execution once rather than once for the test and for the exec again below
  121. // probably something that needs to be benchmarked though
  122. var matchedRule = ua !== '' &&
  123. userAgentRules.reduce(function (matched, _a) {
  124. var browser = _a[0], regex = _a[1];
  125. if (matched) {
  126. return matched;
  127. }
  128. var uaMatch = regex.exec(ua);
  129. return !!uaMatch && [browser, uaMatch];
  130. }, false);
  131. if (!matchedRule) {
  132. return null;
  133. }
  134. var name = matchedRule[0], match = matchedRule[1];
  135. if (name === 'searchbot') {
  136. return new BotInfo();
  137. }
  138. var versionParts = match[1] && match[1].split(/[._]/).slice(0, 3);
  139. if (versionParts) {
  140. if (versionParts.length < REQUIRED_VERSION_PARTS) {
  141. versionParts = __spreadArrays(versionParts, createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length));
  142. }
  143. }
  144. else {
  145. versionParts = [];
  146. }
  147. return new BrowserInfo(name, versionParts.join('.'), detectOS(ua));
  148. }
  149. exports.parseUserAgent = parseUserAgent;
  150. function detectOS(ua) {
  151. for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {
  152. var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];
  153. var match = regex.test(ua);
  154. if (match) {
  155. return os;
  156. }
  157. }
  158. return null;
  159. }
  160. exports.detectOS = detectOS;
  161. function getNodeVersion() {
  162. var isNode = typeof process !== 'undefined' && process.version;
  163. return isNode ? new NodeInfo(process.version.slice(1)) : null;
  164. }
  165. exports.getNodeVersion = getNodeVersion;
  166. function createVersionParts(count) {
  167. var output = [];
  168. for (var ii = 0; ii < count; ii++) {
  169. output.push('0');
  170. }
  171. return output;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement