327 lines
11 KiB
JavaScript
327 lines
11 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.getDeviceInfoAsync = undefined;
|
||
|
|
||
|
let _uploadLogsAsync = (() => {
|
||
|
var _ref = _asyncToGenerator(function* (info) {
|
||
|
let user = yield (_User || _load_User()).default.getCurrentUserAsync();
|
||
|
let username = user ? user.username : 'anonymous';
|
||
|
|
||
|
// write info to file
|
||
|
let expoHome = (_UserSettings || _load_UserSettings()).default.dotExpoHomeDirectory();
|
||
|
let infoJsonFile = new (_jsonFile || _load_jsonFile()).default(_path.default.join(expoHome, 'debug-info.json'));
|
||
|
yield infoJsonFile.writeAsync(info);
|
||
|
|
||
|
// copy files to tempDir
|
||
|
let tempDir = _path.default.join((_Env || _load_Env()).home(), `${username}-diagnostics`);
|
||
|
let archivePath = _path.default.join(expoHome, 'diagnostics.tar.gz');
|
||
|
yield (_Utils || _load_Utils()).ncpAsync(expoHome, tempDir, {
|
||
|
filter: function (filename) {
|
||
|
if (filename.includes('diagnostics') || filename.includes('starter-app-cache') || filename.includes('android-apk-cache') || filename.includes('ios-simulator-app-cache') || filename.includes('state.json~')) {
|
||
|
return false;
|
||
|
} else {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// remove access token
|
||
|
try {
|
||
|
let settingsJsonFile = new (_jsonFile || _load_jsonFile()).default(_path.default.join(tempDir, (_UserSettings || _load_UserSettings()).default.SETTINGS_FILE_NAME));
|
||
|
let settingsJson = yield settingsJsonFile.readAsync();
|
||
|
settingsJson.accessToken = 'redacted';
|
||
|
settingsJson.auth = 'redacted';
|
||
|
yield settingsJsonFile.writeAsync(settingsJson);
|
||
|
} catch (e) {
|
||
|
console.error(e);
|
||
|
}
|
||
|
|
||
|
// compress
|
||
|
yield (_tar || _load_tar()).default.create({ file: archivePath, gzip: true, cwd: (_Env || _load_Env()).home() }, [_path.default.relative((_Env || _load_Env()).home(), tempDir)]);
|
||
|
(_rimraf || _load_rimraf()).default.sync(tempDir);
|
||
|
|
||
|
// upload
|
||
|
let file;
|
||
|
if ((0, (_EnvironmentHelper || _load_EnvironmentHelper()).isNode)()) {
|
||
|
file = _fs.default.createReadStream(archivePath);
|
||
|
} else {
|
||
|
file = new Blob([yield readFileAsync(archivePath)]);
|
||
|
}
|
||
|
let formData = new (_FormData || _load_FormData()).default();
|
||
|
formData.append('archive', file);
|
||
|
|
||
|
let response = yield (_Api || _load_Api()).default.callMethodAsync('uploadDiagnostics', [{}], 'put', null, { formData });
|
||
|
return response.url;
|
||
|
});
|
||
|
|
||
|
return function _uploadLogsAsync(_x) {
|
||
|
return _ref.apply(this, arguments);
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
/* eslint-disable prefer-template */
|
||
|
// From http://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript
|
||
|
|
||
|
|
||
|
/* eslint-enable prefer-template */
|
||
|
|
||
|
let getDeviceInfoAsync = exports.getDeviceInfoAsync = (() => {
|
||
|
var _ref2 = _asyncToGenerator(function* (options = {}) {
|
||
|
let info = {};
|
||
|
|
||
|
yield (_Binaries || _load_Binaries()).sourceBashLoginScriptsAsync();
|
||
|
let whichCommand = process.platform === 'win32' ? 'where' : 'which';
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)('node', ['--version']);
|
||
|
info.nodeVersion = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)(whichCommand, ['node']);
|
||
|
info.nodePath = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)('npm', ['--version']);
|
||
|
info.npmVersion = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)(whichCommand, ['npm']);
|
||
|
info.npmPath = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
info.watchmanVersion = yield (_Watchman || _load_Watchman()).unblockAndGetVersionAsync();
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)(whichCommand, ['watchman']);
|
||
|
info.watchmanPath = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)('adb', ['version']);
|
||
|
info.adbVersion = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)(whichCommand, ['adb']);
|
||
|
info.adbPath = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
info.path = process.env.PATH;
|
||
|
info.shell = process.env.SHELL;
|
||
|
info.home = _os.default.homedir();
|
||
|
info.nvmPath = process.env.NVM_PATH;
|
||
|
info.lang = process.env.LANG;
|
||
|
info.dirname = __dirname;
|
||
|
info.memoryFree = _formatBytes(_os.default.freemem());
|
||
|
info.memoryTotal = _formatBytes(_os.default.totalmem());
|
||
|
info.ip = (_ip || _load_ip()).default.address();
|
||
|
info.hostname = _os.default.hostname();
|
||
|
|
||
|
// TODO: fix these commands on linux
|
||
|
if (process.platform === 'darwin') {
|
||
|
// || process.platform === 'linux') {
|
||
|
try {
|
||
|
info.xdeProcesses = (_lodash || _load_lodash()).default.trim(_child_process.default.execSync('pgrep XDE | xargs ps -p').toString());
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
info.numXdeProcesses = (_lodash || _load_lodash()).default.trim(_child_process.default.execSync('pgrep XDE | wc -l').toString());
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
info.watchmanProcesses = (_lodash || _load_lodash()).default.trim(_child_process.default.execSync('pgrep watchman | xargs ps -p').toString());
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
info.numWatchmanProcesses = (_lodash || _load_lodash()).default.trim(_child_process.default.execSync('pgrep watchman | wc -l').toString());
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
info.ngrokProcesses = (_lodash || _load_lodash()).default.trim(_child_process.default.execSync('pgrep ngrok | xargs ps -p').toString());
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
info.numNgrokProcesses = (_lodash || _load_lodash()).default.trim(_child_process.default.execSync('pgrep ngrok | wc -l').toString());
|
||
|
} catch (e) {}
|
||
|
}
|
||
|
|
||
|
if (process.platform === 'darwin') {
|
||
|
// `xcrun` and `xcodebuild` will pop up a dialog if Xcode isn't installed
|
||
|
if ((_Binaries || _load_Binaries()).isXcodeInstalled()) {
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)('xcrun', ['--version']);
|
||
|
info.xcrunVersion = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)('xcodebuild', ['-version']);
|
||
|
info.xcodebuildVersion = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
let result = yield (0, (_spawnAsync || _load_spawnAsync()).default)('launchctl', ['limit']);
|
||
|
info.launchctlLimit = (_lodash || _load_lodash()).default.trim(result.stdout);
|
||
|
} catch (e) {}
|
||
|
}
|
||
|
|
||
|
// TODO: can probably get rid of these options if we remove Intercom
|
||
|
if (options.uploadLogs) {
|
||
|
info.url = yield _uploadLogsAsync(info);
|
||
|
}
|
||
|
|
||
|
if (options.limitLengthForIntercom) {
|
||
|
info = (_lodash || _load_lodash()).default.mapValues(info, function (value) {
|
||
|
if (value && value.length > 100 && !value.startsWith('http')) {
|
||
|
return value.substring(0, 100);
|
||
|
} else {
|
||
|
return value;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return info;
|
||
|
});
|
||
|
|
||
|
return function getDeviceInfoAsync() {
|
||
|
return _ref2.apply(this, arguments);
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
var _lodash;
|
||
|
|
||
|
function _load_lodash() {
|
||
|
return _lodash = _interopRequireDefault(require('lodash'));
|
||
|
}
|
||
|
|
||
|
var _child_process = _interopRequireDefault(require('child_process'));
|
||
|
|
||
|
var _fs = _interopRequireDefault(require('fs'));
|
||
|
|
||
|
var _jsonFile;
|
||
|
|
||
|
function _load_jsonFile() {
|
||
|
return _jsonFile = _interopRequireDefault(require('@expo/json-file'));
|
||
|
}
|
||
|
|
||
|
var _os = _interopRequireDefault(require('os'));
|
||
|
|
||
|
var _path = _interopRequireDefault(require('path'));
|
||
|
|
||
|
var _util;
|
||
|
|
||
|
function _load_util() {
|
||
|
return _util = _interopRequireDefault(require('util.promisify'));
|
||
|
}
|
||
|
|
||
|
var _rimraf;
|
||
|
|
||
|
function _load_rimraf() {
|
||
|
return _rimraf = _interopRequireDefault(require('rimraf'));
|
||
|
}
|
||
|
|
||
|
var _spawnAsync;
|
||
|
|
||
|
function _load_spawnAsync() {
|
||
|
return _spawnAsync = _interopRequireDefault(require('@expo/spawn-async'));
|
||
|
}
|
||
|
|
||
|
var _tar;
|
||
|
|
||
|
function _load_tar() {
|
||
|
return _tar = _interopRequireDefault(require('tar'));
|
||
|
}
|
||
|
|
||
|
var _ip;
|
||
|
|
||
|
function _load_ip() {
|
||
|
return _ip = _interopRequireDefault(require('./ip'));
|
||
|
}
|
||
|
|
||
|
var _Api;
|
||
|
|
||
|
function _load_Api() {
|
||
|
return _Api = _interopRequireDefault(require('./Api'));
|
||
|
}
|
||
|
|
||
|
var _Binaries;
|
||
|
|
||
|
function _load_Binaries() {
|
||
|
return _Binaries = _interopRequireWildcard(require('./Binaries'));
|
||
|
}
|
||
|
|
||
|
var _Env;
|
||
|
|
||
|
function _load_Env() {
|
||
|
return _Env = _interopRequireWildcard(require('./Env'));
|
||
|
}
|
||
|
|
||
|
var _FormData;
|
||
|
|
||
|
function _load_FormData() {
|
||
|
return _FormData = _interopRequireDefault(require('./tools/FormData'));
|
||
|
}
|
||
|
|
||
|
var _EnvironmentHelper;
|
||
|
|
||
|
function _load_EnvironmentHelper() {
|
||
|
return _EnvironmentHelper = require('./tools/EnvironmentHelper');
|
||
|
}
|
||
|
|
||
|
var _User;
|
||
|
|
||
|
function _load_User() {
|
||
|
return _User = _interopRequireDefault(require('./User'));
|
||
|
}
|
||
|
|
||
|
var _UserSettings;
|
||
|
|
||
|
function _load_UserSettings() {
|
||
|
return _UserSettings = _interopRequireDefault(require('./UserSettings'));
|
||
|
}
|
||
|
|
||
|
var _Utils;
|
||
|
|
||
|
function _load_Utils() {
|
||
|
return _Utils = _interopRequireWildcard(require('./Utils'));
|
||
|
}
|
||
|
|
||
|
var _Watchman;
|
||
|
|
||
|
function _load_Watchman() {
|
||
|
return _Watchman = _interopRequireWildcard(require('./Watchman'));
|
||
|
}
|
||
|
|
||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
||
|
|
||
|
const readFileAsync = (0, (_util || _load_util()).default)(_fs.default.readFile);
|
||
|
|
||
|
function _formatBytes(bytes) {
|
||
|
if (bytes >= 1000000000) {
|
||
|
return (bytes / 1000000000).toFixed(2) + ' GB';
|
||
|
} else if (bytes >= 1000000) {
|
||
|
return (bytes / 1000000).toFixed(2) + ' MB';
|
||
|
} else if (bytes >= 1000) {
|
||
|
return (bytes / 1000).toFixed(2) + ' KB';
|
||
|
} else if (bytes > 1) {
|
||
|
return bytes + ' bytes';
|
||
|
} else if (bytes === 1) {
|
||
|
return bytes + '${bytes} byte';
|
||
|
} else {
|
||
|
return '0 bytes';
|
||
|
}
|
||
|
}
|
||
|
//# sourceMappingURL=__sourcemaps__/Diagnostics.js.map
|