81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2013-present, Facebook, Inc.
 | |
|  *
 | |
|  * This source code is licensed under the MIT license found in the
 | |
|  * LICENSE file in the root directory of this source tree.
 | |
|  *
 | |
|  * @providesModule UserAgentData
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Usage note:
 | |
|  * This module makes a best effort to export the same data we would internally.
 | |
|  * At Facebook we use a server-generated module that does the parsing and
 | |
|  * exports the data for the client to use. We can't rely on a server-side
 | |
|  * implementation in open source so instead we make use of an open source
 | |
|  * library to do the heavy lifting and then make some adjustments as necessary.
 | |
|  * It's likely there will be some differences. Some we can smooth over.
 | |
|  * Others are going to be harder.
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| var UAParser = require('ua-parser-js');
 | |
| 
 | |
| var UNKNOWN = 'Unknown';
 | |
| 
 | |
| var PLATFORM_MAP = {
 | |
|   'Mac OS': 'Mac OS X'
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Convert from UAParser platform name to what we expect.
 | |
|  */
 | |
| function convertPlatformName(name) {
 | |
|   return PLATFORM_MAP[name] || name;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the version number in parts. This is very naive. We actually get major
 | |
|  * version as a part of UAParser already, which is generally good enough, but
 | |
|  * let's get the minor just in case.
 | |
|  */
 | |
| function getBrowserVersion(version) {
 | |
|   if (!version) {
 | |
|     return {
 | |
|       major: '',
 | |
|       minor: ''
 | |
|     };
 | |
|   }
 | |
|   var parts = version.split('.');
 | |
|   return {
 | |
|     major: parts[0],
 | |
|     minor: parts[1]
 | |
|   };
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the UA data fom UAParser and then convert it to the format we're
 | |
|  * expecting for our APIS.
 | |
|  */
 | |
| var parser = new UAParser();
 | |
| var results = parser.getResult();
 | |
| 
 | |
| // Do some conversion first.
 | |
| var browserVersionData = getBrowserVersion(results.browser.version);
 | |
| var uaData = {
 | |
|   browserArchitecture: results.cpu.architecture || UNKNOWN,
 | |
|   browserFullVersion: results.browser.version || UNKNOWN,
 | |
|   browserMinorVersion: browserVersionData.minor || UNKNOWN,
 | |
|   browserName: results.browser.name || UNKNOWN,
 | |
|   browserVersion: results.browser.major || UNKNOWN,
 | |
|   deviceName: results.device.model || UNKNOWN,
 | |
|   engineName: results.engine.name || UNKNOWN,
 | |
|   engineVersion: results.engine.version || UNKNOWN,
 | |
|   platformArchitecture: results.cpu.architecture || UNKNOWN,
 | |
|   platformName: convertPlatformName(results.os.name) || UNKNOWN,
 | |
|   platformVersion: results.os.version || UNKNOWN,
 | |
|   platformFullVersion: results.os.version || UNKNOWN
 | |
| };
 | |
| 
 | |
| module.exports = uaData; |