82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
|
/**
|
||
|
* Copyright (c) 2013-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* 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;
|