aboutsummaryrefslogtreecommitdiff
path: root/node_modules/fbjs/lib/UserAgentData.js.flow
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/fbjs/lib/UserAgentData.js.flow')
-rw-r--r--node_modules/fbjs/lib/UserAgentData.js.flow83
1 files changed, 83 insertions, 0 deletions
diff --git a/node_modules/fbjs/lib/UserAgentData.js.flow b/node_modules/fbjs/lib/UserAgentData.js.flow
new file mode 100644
index 000000000..e7f2ae008
--- /dev/null
+++ b/node_modules/fbjs/lib/UserAgentData.js.flow
@@ -0,0 +1,83 @@
+/**
+ * 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.
+ *
+ * @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; \ No newline at end of file