1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * 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.
- *
- */
- /**
- * 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;
|