mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53487 Changelog: [Internal] Reviewed By: marcoww6 Differential Revision: D81150232 fbshipit-source-id: 23320495061c7c78ced8f95db90101c4b55d9690
99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
import type {DebuggerShellPreparationResult} from '../';
|
|
|
|
const {spawn} = require('cross-spawn');
|
|
|
|
async function spawnAndGetStderr(
|
|
command: string,
|
|
args: string[],
|
|
): Promise<{
|
|
code: number,
|
|
stderr: string,
|
|
}> {
|
|
return new Promise((resolve, reject) => {
|
|
const child = spawn(command, args, {
|
|
stdio: ['ignore', 'ignore', 'pipe'],
|
|
encoding: 'utf8',
|
|
windowsHide: true,
|
|
});
|
|
let stderr = '';
|
|
child.stderr.on('data', data => {
|
|
stderr += data;
|
|
});
|
|
child.on('error', error => {
|
|
reject(error);
|
|
});
|
|
child.on('close', (code, signal) => {
|
|
resolve({
|
|
code,
|
|
stderr,
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
async function prepareDebuggerShellFromDotSlashFile(
|
|
filePath: string,
|
|
): Promise<DebuggerShellPreparationResult> {
|
|
const {code, stderr} = await spawnAndGetStderr(
|
|
// $FlowFixMe[cannot-resolve-module] fb-dotslash includes Flow types but Flow does not pick them up
|
|
require('fb-dotslash'),
|
|
['--', 'fetch', filePath],
|
|
);
|
|
if (code === 0) {
|
|
return {code: 'success'};
|
|
}
|
|
if (
|
|
stderr.includes('dotslash error') &&
|
|
stderr.includes('no providers succeeded')
|
|
) {
|
|
if (stderr.includes('failed to verify artifact')) {
|
|
return {
|
|
code: 'possible_corruption',
|
|
humanReadableMessage:
|
|
'Failed to verify the latest version of React Native DevTools. ' +
|
|
'Using a fallback version instead. ',
|
|
verboseInfo: stderr,
|
|
};
|
|
}
|
|
return {
|
|
code: 'likely_offline',
|
|
humanReadableMessage:
|
|
'Failed to download the latest version of React Native DevTools. ' +
|
|
'Using a fallback version instead. ' +
|
|
'Connect to the internet or check your network settings.',
|
|
verboseInfo: stderr,
|
|
};
|
|
}
|
|
if (
|
|
stderr.includes('dotslash error') &&
|
|
stderr.includes('platform not supported')
|
|
) {
|
|
return {
|
|
code: 'platform_not_supported',
|
|
humanReadableMessage:
|
|
'The latest version of React Native DevTools is not supported on this platform. ' +
|
|
'Using a fallback version instead.',
|
|
verboseInfo: stderr,
|
|
};
|
|
}
|
|
return {
|
|
code: 'unexpected_error',
|
|
humanReadableMessage:
|
|
'An unexpected error occured while installing the latest version of React Native DevTools. ' +
|
|
'Using a fallback version instead.',
|
|
verboseInfo: stderr,
|
|
};
|
|
}
|
|
|
|
export {spawnAndGetStderr, prepareDebuggerShellFromDotSlashFile};
|