From 6dd0677e9be80e44b681950aef77f2155ca64c64 Mon Sep 17 00:00:00 2001 From: Nick Tom Thomas Date: Wed, 29 Sep 2021 17:13:24 -0400 Subject: [PATCH 01/17] Changed doctor to cli-doctor --- packages/cli-doctor/package.json | 31 +++++++++++++++++++ .../src}/checkInstallation.ts | 0 .../doctor => cli-doctor/src}/doctor.ts | 4 +-- .../__tests__/androidHomeEnvVariable.test.ts | 2 +- .../healthchecks/__tests__/androidNDK.test.ts | 4 +-- .../healthchecks/__tests__/androidSDK.test.ts | 0 .../__tests__/androidStudio.test.ts | 0 .../src}/healthchecks/__tests__/jdk.test.ts | 8 ++--- .../healthchecks/androidHomeEnvVariable.ts | 0 .../src}/healthchecks/androidNDK.ts | 0 .../src}/healthchecks/androidSDK.ts | 8 ++--- .../src}/healthchecks/androidStudio.ts | 8 ++--- .../src}/healthchecks/cocoaPods.ts | 4 +-- .../src}/healthchecks/common.ts | 0 .../src}/healthchecks/index.ts | 2 +- .../src}/healthchecks/iosDeploy.ts | 0 .../src}/healthchecks/jdk.ts | 4 +-- .../src}/healthchecks/nodeJS.ts | 0 .../src}/healthchecks/packageManagers.ts | 2 +- .../src}/healthchecks/watchman.ts | 2 +- .../src}/healthchecks/xcode.ts | 0 .../doctor => cli-doctor/src}/index.ts | 0 .../src}/printFixOptions.ts | 0 .../src}/runAutomaticFix.ts | 0 .../doctor => cli-doctor/src}/types.ts | 0 .../src}/versionRanges.ts | 0 packages/cli-doctor/tsconfig.json | 11 +++++++ packages/cli/package.json | 1 + packages/cli/src/commands/index.ts | 2 +- packages/cli/src/tools/brewInstall.ts | 2 +- packages/cli/src/tools/install.ts | 2 +- packages/cli/tsconfig.json | 3 +- 32 files changed, 72 insertions(+), 28 deletions(-) create mode 100644 packages/cli-doctor/package.json rename packages/{cli/src/commands/doctor => cli-doctor/src}/checkInstallation.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/doctor.ts (97%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/__tests__/androidHomeEnvVariable.test.ts (95%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/__tests__/androidNDK.test.ts (93%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/__tests__/androidSDK.test.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/__tests__/androidStudio.test.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/__tests__/jdk.test.ts (91%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/androidHomeEnvVariable.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/androidNDK.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/androidSDK.ts (94%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/androidStudio.ts (85%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/cocoaPods.ts (93%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/common.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/index.ts (95%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/iosDeploy.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/jdk.ts (91%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/nodeJS.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/packageManagers.ts (96%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/watchman.ts (91%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/healthchecks/xcode.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/index.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/printFixOptions.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/runAutomaticFix.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/types.ts (100%) rename packages/{cli/src/commands/doctor => cli-doctor/src}/versionRanges.ts (100%) create mode 100644 packages/cli-doctor/tsconfig.json diff --git a/packages/cli-doctor/package.json b/packages/cli-doctor/package.json new file mode 100644 index 000000000..2c60b853c --- /dev/null +++ b/packages/cli-doctor/package.json @@ -0,0 +1,31 @@ +{ + "name": "@react-native-community/cli-doctor", + "version": "6.0.1", + "license": "MIT", + "main": "build/index.js", + "publishConfig": { + "access": "public" + }, + "types": "build/index.d.ts", + "dependencies": { + "@react-native-community/cli-tools": "^6.0.0-rc.0", + "chalk": "^3.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + }, + "files": [ + "build", + "!*.d.ts", + "!*.map" + ], + "devDependencies": { + "@react-native-community/cli-types": "^6.0.0", + "@types/ip": "^1.1.0" + }, + "homepage": "https://github.com/react-native-community/cli/tree/master/packages/cli-doctor", + "repository": { + "type": "git", + "url": "https://github.com/react-native-community/cli.git", + "directory": "packages/cli-doctor" + } +} diff --git a/packages/cli/src/commands/doctor/checkInstallation.ts b/packages/cli-doctor/src/checkInstallation.ts similarity index 100% rename from packages/cli/src/commands/doctor/checkInstallation.ts rename to packages/cli-doctor/src/checkInstallation.ts diff --git a/packages/cli/src/commands/doctor/doctor.ts b/packages/cli-doctor/src/doctor.ts similarity index 97% rename from packages/cli/src/commands/doctor/doctor.ts rename to packages/cli-doctor/src/doctor.ts index 3df151937..30c898672 100644 --- a/packages/cli/src/commands/doctor/doctor.ts +++ b/packages/cli-doctor/src/doctor.ts @@ -1,7 +1,7 @@ import chalk from 'chalk'; import {logger} from '@react-native-community/cli-tools'; import {getHealthchecks, HEALTHCHECK_TYPES} from './healthchecks'; -import {getLoader} from '../../tools/loader'; +import {getLoader} from '@react-native-community/cli/src/tools/loader'; import printFixOptions, {KEYS} from './printFixOptions'; import runAutomaticFix, {AUTOMATIC_FIX_LEVELS} from './runAutomaticFix'; import { @@ -10,7 +10,7 @@ import { HealthCheckInterface, } from '@react-native-community/cli-types'; import {HealthCheckCategoryResult, HealthCheckResult} from './types'; -import getEnvironmentInfo from '../../tools/envinfo'; +import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; import {logMessage} from './healthchecks/common'; const printCategory = ({label, key}: {label: string; key: number}) => { diff --git a/packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts similarity index 95% rename from packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts rename to packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts index d526c44b5..36a2f1c1e 100644 --- a/packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts @@ -1,5 +1,5 @@ import androidHomeEnvVariables from '../androidHomeEnvVariable'; -import {NoopLoader} from '../../../../tools/loader'; +import {NoopLoader} from '@react-native-communit/tools/loader'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import * as common from '../common'; diff --git a/packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts similarity index 93% rename from packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts rename to packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts index 756f419aa..39c4e097f 100644 --- a/packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts @@ -1,7 +1,7 @@ import androidNDK from '../androidNDK'; -import getEnvironmentInfo from '../../../../tools/envinfo'; +import getEnvironmentInfo from '@react-native-community/tools/envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../../tools/loader'; +import {NoopLoader} from '@react-native-community/tools/loader'; import * as common from '../common'; diff --git a/packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts rename to packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts rename to packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts similarity index 91% rename from packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts rename to packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts index 6748dc344..ec836180d 100644 --- a/packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts @@ -1,11 +1,11 @@ import execa from 'execa'; import jdk from '../jdk'; -import getEnvironmentInfo from '../../../../tools/envinfo'; +import getEnvironmentInfo from '@react-native-community/tools/envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../../tools/loader'; +import {NoopLoader} from '@react-native-community/tools/loader'; import * as common from '../common'; -import * as unzip from '../../../../tools/unzip'; -import * as deleteFile from '../../../../tools/deleteFile'; +import * as unzip from '@react-native-community/tools/unzip'; +import * as deleteFile from '@react-native-communit/tools/deleteFile'; jest.mock('execa', () => jest.fn()); jest diff --git a/packages/cli/src/commands/doctor/healthchecks/androidHomeEnvVariable.ts b/packages/cli-doctor/src/healthchecks/androidHomeEnvVariable.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/androidHomeEnvVariable.ts rename to packages/cli-doctor/src/healthchecks/androidHomeEnvVariable.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/androidNDK.ts b/packages/cli-doctor/src/healthchecks/androidNDK.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/androidNDK.ts rename to packages/cli-doctor/src/healthchecks/androidNDK.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.ts b/packages/cli-doctor/src/healthchecks/androidSDK.ts similarity index 94% rename from packages/cli/src/commands/doctor/healthchecks/androidSDK.ts rename to packages/cli-doctor/src/healthchecks/androidSDK.ts index c5d3035c1..de18a52bc 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.ts +++ b/packages/cli-doctor/src/healthchecks/androidSDK.ts @@ -7,7 +7,7 @@ import { HealthCheckInterface, EnvironmentInfo, } from '@react-native-community/cli-types'; -import findProjectRoot from '../../../tools/config/findProjectRoot'; +import findProjectRoot from '@react-native-community/cli/src/tools/config/findProjectRoot'; import { getAndroidSdkRootInstallation, installComponent, @@ -16,13 +16,13 @@ import { enableHAXM, enableWHPX, createAVD, -} from '../../../tools/windows/androidWinHelpers'; -import {downloadAndUnzip} from '../../../tools/downloadAndUnzip'; +} from '@react-native-community/cli/src/tools/windows/androidWinHelpers'; +import {downloadAndUnzip} from '@react-native-community/cli/src/tools/downloadAndUnzip'; import { setEnvironment, updateEnvironment, -} from '../../../tools/windows/environmentVariables'; +} from '@react-native-community/cli/src/tools/windows/environmentVariables'; const getBuildToolsVersion = (): string => { let projectRoot = ''; diff --git a/packages/cli/src/commands/doctor/healthchecks/androidStudio.ts b/packages/cli-doctor/src/healthchecks/androidStudio.ts similarity index 85% rename from packages/cli/src/commands/doctor/healthchecks/androidStudio.ts rename to packages/cli-doctor/src/healthchecks/androidStudio.ts index 8c22ec59e..7ee8b4ff6 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidStudio.ts +++ b/packages/cli-doctor/src/healthchecks/androidStudio.ts @@ -2,10 +2,10 @@ import {join} from 'path'; import {HealthCheckInterface} from '@react-native-community/cli-types'; -import {downloadAndUnzip} from '../../../tools/downloadAndUnzip'; -import {executeCommand} from '../../../tools/windows/executeWinCommand'; -import {getUserAndroidPath} from '../../../tools/windows/androidWinHelpers'; -import {createShortcut} from '../../../tools/windows/create-shortcut'; +import {downloadAndUnzip} from '@react-native-community/cli/src/tools/downloadAndUnzip'; +import {executeCommand} from '@react-native-community/cli/src/tools/windows/executeWinCommand'; +import {getUserAndroidPath} from '@react-native-community/cli/src/tools/windows/androidWinHelpers'; +import {createShortcut} from '@react-native-community/cli/src/tools/windows/create-shortcut'; export default { label: 'Android Studio', diff --git a/packages/cli/src/commands/doctor/healthchecks/cocoaPods.ts b/packages/cli-doctor/src/healthchecks/cocoaPods.ts similarity index 93% rename from packages/cli/src/commands/doctor/healthchecks/cocoaPods.ts rename to packages/cli-doctor/src/healthchecks/cocoaPods.ts index a34ee9c13..8720b4ed9 100644 --- a/packages/cli/src/commands/doctor/healthchecks/cocoaPods.ts +++ b/packages/cli-doctor/src/healthchecks/cocoaPods.ts @@ -3,9 +3,9 @@ import {isSoftwareNotInstalled} from '../checkInstallation'; import { promptCocoaPodsInstallationQuestion, runSudo, -} from '../../../tools/installPods'; +} from '@react-native-community/cli/src/tools/installPods'; import {removeMessage, logError} from './common'; -import {brewInstall} from '../../../tools/brewInstall'; +import {brewInstall} from '@react-native-community/cli/src/tools/brewInstall'; import {HealthCheckInterface} from '@react-native-community/cli-types'; const label = 'CocoaPods'; diff --git a/packages/cli/src/commands/doctor/healthchecks/common.ts b/packages/cli-doctor/src/healthchecks/common.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/common.ts rename to packages/cli-doctor/src/healthchecks/common.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/index.ts b/packages/cli-doctor/src/healthchecks/index.ts similarity index 95% rename from packages/cli/src/commands/doctor/healthchecks/index.ts rename to packages/cli-doctor/src/healthchecks/index.ts index e500fcf7c..488f3df9f 100644 --- a/packages/cli/src/commands/doctor/healthchecks/index.ts +++ b/packages/cli-doctor/src/healthchecks/index.ts @@ -13,7 +13,7 @@ import { Healthchecks, HealthCheckCategory, } from '@react-native-community/cli-types'; -import loadConfig from '../../../tools/config'; +import loadConfig from '@react-native-community/cli/src/tools/config'; export const HEALTHCHECK_TYPES = { ERROR: 'ERROR', diff --git a/packages/cli/src/commands/doctor/healthchecks/iosDeploy.ts b/packages/cli-doctor/src/healthchecks/iosDeploy.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/iosDeploy.ts rename to packages/cli-doctor/src/healthchecks/iosDeploy.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/jdk.ts b/packages/cli-doctor/src/healthchecks/jdk.ts similarity index 91% rename from packages/cli/src/commands/doctor/healthchecks/jdk.ts rename to packages/cli-doctor/src/healthchecks/jdk.ts index 9dd4d3346..65b7eea77 100644 --- a/packages/cli/src/commands/doctor/healthchecks/jdk.ts +++ b/packages/cli-doctor/src/healthchecks/jdk.ts @@ -3,11 +3,11 @@ import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; import {HealthCheckInterface} from '@react-native-community/cli-types'; -import {downloadAndUnzip} from '../../../tools/downloadAndUnzip'; +import {downloadAndUnzip} from '@react-native-community/cli/src/tools/downloadAndUnzip'; import { setEnvironment, updateEnvironment, -} from '../../../tools/windows/environmentVariables'; +} from '@react-native-community/cli/src/tools/windows/environmentVariables'; export default { label: 'JDK', diff --git a/packages/cli/src/commands/doctor/healthchecks/nodeJS.ts b/packages/cli-doctor/src/healthchecks/nodeJS.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/nodeJS.ts rename to packages/cli-doctor/src/healthchecks/nodeJS.ts diff --git a/packages/cli/src/commands/doctor/healthchecks/packageManagers.ts b/packages/cli-doctor/src/healthchecks/packageManagers.ts similarity index 96% rename from packages/cli/src/commands/doctor/healthchecks/packageManagers.ts rename to packages/cli-doctor/src/healthchecks/packageManagers.ts index 51b83a621..e98809cf6 100644 --- a/packages/cli/src/commands/doctor/healthchecks/packageManagers.ts +++ b/packages/cli-doctor/src/healthchecks/packageManagers.ts @@ -4,7 +4,7 @@ import { PACKAGE_MANAGERS, doesSoftwareNeedToBeFixed, } from '../checkInstallation'; -import {install} from '../../../tools/install'; +import {install} from '@react-native-community/cli/src/tools/install'; import {HealthCheckInterface} from '@react-native-community/cli-types'; const packageManager = (() => { diff --git a/packages/cli/src/commands/doctor/healthchecks/watchman.ts b/packages/cli-doctor/src/healthchecks/watchman.ts similarity index 91% rename from packages/cli/src/commands/doctor/healthchecks/watchman.ts rename to packages/cli-doctor/src/healthchecks/watchman.ts index e3e8c2074..5c8349002 100644 --- a/packages/cli/src/commands/doctor/healthchecks/watchman.ts +++ b/packages/cli-doctor/src/healthchecks/watchman.ts @@ -1,6 +1,6 @@ import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import {install} from '../../../tools/install'; +import {install} from '@react-native-community/cli/src/tools/install'; import {HealthCheckInterface} from '@react-native-community/cli-types'; const label = 'Watchman'; diff --git a/packages/cli/src/commands/doctor/healthchecks/xcode.ts b/packages/cli-doctor/src/healthchecks/xcode.ts similarity index 100% rename from packages/cli/src/commands/doctor/healthchecks/xcode.ts rename to packages/cli-doctor/src/healthchecks/xcode.ts diff --git a/packages/cli/src/commands/doctor/index.ts b/packages/cli-doctor/src/index.ts similarity index 100% rename from packages/cli/src/commands/doctor/index.ts rename to packages/cli-doctor/src/index.ts diff --git a/packages/cli/src/commands/doctor/printFixOptions.ts b/packages/cli-doctor/src/printFixOptions.ts similarity index 100% rename from packages/cli/src/commands/doctor/printFixOptions.ts rename to packages/cli-doctor/src/printFixOptions.ts diff --git a/packages/cli/src/commands/doctor/runAutomaticFix.ts b/packages/cli-doctor/src/runAutomaticFix.ts similarity index 100% rename from packages/cli/src/commands/doctor/runAutomaticFix.ts rename to packages/cli-doctor/src/runAutomaticFix.ts diff --git a/packages/cli/src/commands/doctor/types.ts b/packages/cli-doctor/src/types.ts similarity index 100% rename from packages/cli/src/commands/doctor/types.ts rename to packages/cli-doctor/src/types.ts diff --git a/packages/cli/src/commands/doctor/versionRanges.ts b/packages/cli-doctor/src/versionRanges.ts similarity index 100% rename from packages/cli/src/commands/doctor/versionRanges.ts rename to packages/cli-doctor/src/versionRanges.ts diff --git a/packages/cli-doctor/tsconfig.json b/packages/cli-doctor/tsconfig.json new file mode 100644 index 000000000..c42dce26d --- /dev/null +++ b/packages/cli-doctor/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "build" + }, + "references": [ + {"path": "../tools"}, + {"path": "../cli-types"}, + ] +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 4bd4555f9..7fafe9172 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -29,6 +29,7 @@ "@react-native-community/cli-server-api": "^6.0.0-rc.0", "@react-native-community/cli-tools": "^6.0.0-rc.0", "@react-native-community/cli-types": "^6.0.0", + "@react-native-community/cli-doctor": "^6.0.0", "appdirsjs": "^1.2.4", "chalk": "^3.0.0", "command-exists": "^1.2.8", diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 9255335de..962cfae9a 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -10,7 +10,7 @@ import upgrade from './upgrade/upgrade'; import info from './info/info'; import config from './config/config'; import init from './init'; -import doctor from './doctor'; +import doctor from '@react-native-community/cli-doctor'; import profileHermes from '@react-native-community/cli-hermes'; export const projectCommands = [ diff --git a/packages/cli/src/tools/brewInstall.ts b/packages/cli/src/tools/brewInstall.ts index 437d7888c..0a9ad87fb 100644 --- a/packages/cli/src/tools/brewInstall.ts +++ b/packages/cli/src/tools/brewInstall.ts @@ -1,6 +1,6 @@ import execa from 'execa'; import ora from 'ora'; -import {logError} from '../commands/doctor/healthchecks/common'; +import {logError} from '@react-native-community/cli-doctor/src/healthchecks/common'; type InstallArgs = { pkg: string; diff --git a/packages/cli/src/tools/install.ts b/packages/cli/src/tools/install.ts index 0c77f38ae..61c22a10a 100644 --- a/packages/cli/src/tools/install.ts +++ b/packages/cli/src/tools/install.ts @@ -1,6 +1,6 @@ import ora from 'ora'; import {brewInstall} from './brewInstall'; -import {logManualInstallation} from '../commands/doctor/healthchecks/common'; +import {logManualInstallation} from '@react-native-community/cli-doctor/src/healthchecks/common'; type InstallArgs = { pkg: string; diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index f3d42e37b..26e47ae16 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -9,6 +9,7 @@ {"path": "../cli-types"}, {"path": "../debugger-ui"}, {"path": "../cli-server-api"}, - {"path": "../cli-hermes"} + {"path": "../cli-hermes"}, + {"path": "../cli-doctor"} ] } From 0c46e02355d745de6b11640deb50594c1ef38cbb Mon Sep 17 00:00:00 2001 From: Nick Tom Thomas Date: Fri, 1 Oct 2021 15:43:35 -0400 Subject: [PATCH 02/17] Fixed lint issues --- .../__tests__/androidHomeEnvVariable.test.ts | 2 +- .../src/healthchecks/__tests__/androidNDK.test.ts | 4 ++-- .../src/healthchecks/__tests__/androidSDK.test.ts | 12 ++++++------ .../src/healthchecks/__tests__/androidStudio.test.ts | 6 +++--- .../src/healthchecks/__tests__/jdk.test.ts | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts index 36a2f1c1e..953d57265 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts @@ -1,5 +1,5 @@ import androidHomeEnvVariables from '../androidHomeEnvVariable'; -import {NoopLoader} from '@react-native-communit/tools/loader'; +import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts index 39c4e097f..7d2b65d56 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts @@ -1,7 +1,7 @@ import androidNDK from '../androidNDK'; -import getEnvironmentInfo from '@react-native-community/tools/envinfo'; +import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '@react-native-community/tools/loader'; +import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts index 1af9dbd2a..d861587d3 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts @@ -1,15 +1,15 @@ import * as os from 'os'; import {join} from 'path'; import execa from 'execa'; -import {cleanup, writeFiles} from '../../../../../../../jest/helpers'; +import {cleanup, writeFiles} from '../../../../../jest/helpers'; import androidSDK from '../androidSDK'; -import getEnvironmentInfo from '../../../../tools/envinfo'; -import * as downloadAndUnzip from '../../../../tools/downloadAndUnzip'; +import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; +import * as downloadAndUnzip from '@react-native-community/cli/src/tools/downloadAndUnzip'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../../tools/loader'; +import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import * as common from '../common'; -import * as androidWinHelpers from '../../../../tools/windows/androidWinHelpers'; -import * as environmentVariables from '../../../../tools/windows/environmentVariables'; +import * as androidWinHelpers from '@react-native-community/cli/src/tools/windows/androidWinHelpers'; +import * as environmentVariables from '@react-native-community/cli/src/tools/windows/environmentVariables'; const logSpy = jest.spyOn(common, 'logManualInstallation'); const {logManualInstallation} = common; diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts index 59665b0ac..3a506d836 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts @@ -1,10 +1,10 @@ import execa from 'execa'; import androidStudio from '../androidStudio'; -import getEnvironmentInfo from '../../../../tools/envinfo'; +import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../../tools/loader'; +import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import * as common from '../common'; -import * as downloadAndUnzip from '../../../../tools/downloadAndUnzip'; +import * as downloadAndUnzip from '@react-native-community/cli/src/tools/downloadAndUnzip'; jest.mock('execa', () => jest.fn()); diff --git a/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts index ec836180d..b032135eb 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts @@ -1,11 +1,11 @@ import execa from 'execa'; import jdk from '../jdk'; -import getEnvironmentInfo from '@react-native-community/tools/envinfo'; +import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '@react-native-community/tools/loader'; +import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import * as common from '../common'; -import * as unzip from '@react-native-community/tools/unzip'; -import * as deleteFile from '@react-native-communit/tools/deleteFile'; +import * as unzip from '@react-native-community/cli/src/tools/unzip'; +import * as deleteFile from '@react-native-community/cli/src/tools/deleteFile'; jest.mock('execa', () => jest.fn()); jest From b5984a27ba312d4f2d48a27318c163fe4f89ab1f Mon Sep 17 00:00:00 2001 From: Nick Tom Thomas Date: Fri, 1 Oct 2021 15:54:20 -0400 Subject: [PATCH 03/17] Fixed unit test cases for ci --- .../cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts index d861587d3..fd7cee898 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts +++ b/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts @@ -19,7 +19,7 @@ jest.mock('execa', () => jest.fn()); let mockWorkingDir = ''; // TODO remove when androidSDK starts getting gradle.build path from config -jest.mock('../../../../tools/config/findProjectRoot', () => () => { +jest.mock('../../../../cli/src/tools/config/findProjectRoot', () => () => { return mockWorkingDir; }); From 6ca39a2a1e2490040f7019f776cdf41ebecc78e8 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Mon, 24 Jan 2022 17:54:19 +0100 Subject: [PATCH 04/17] chore: add back --- packages/platform-android/src/commands/runAndroid/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/platform-android/src/commands/runAndroid/index.ts b/packages/platform-android/src/commands/runAndroid/index.ts index 6100efeb0..37631a720 100644 --- a/packages/platform-android/src/commands/runAndroid/index.ts +++ b/packages/platform-android/src/commands/runAndroid/index.ts @@ -338,10 +338,12 @@ export default { name: '--appId ', description: 'Specify an applicationId to launch after build. If not specified, `package` from AndroidManifest.xml will be used.', + default: '', }, { name: '--appIdSuffix ', description: 'Specify an applicationIdSuffix to launch after build.', + default: '', }, { name: '--main-activity ', From 5cb0f0fe2baa45bc2c0a7488bf62935ce2877e86 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Mon, 24 Jan 2022 18:57:25 +0100 Subject: [PATCH 05/17] WIP: update few missing deps and move tools around --- packages/cli-doctor/package.json | 18 +++++++++++--- .../src/commands}/__tests__/info.test.ts | 0 packages/cli-doctor/src/commands/doctor.ts | 21 ++++++++++++++++ .../info => cli-doctor/src/commands}/info.ts | 2 +- packages/cli-doctor/src/index.ts | 24 ++++--------------- .../src/{ => tools}/checkInstallation.ts | 0 packages/cli-doctor/src/{ => tools}/doctor.ts | 2 +- .../{cli => cli-doctor}/src/tools/envinfo.ts | 0 .../__tests__/androidHomeEnvVariable.test.ts | 0 .../healthchecks/__tests__/androidNDK.test.ts | 2 +- .../healthchecks/__tests__/androidSDK.test.ts | 2 +- .../__tests__/androidStudio.test.ts | 2 +- .../healthchecks/__tests__/jdk.test.ts | 2 +- .../healthchecks/androidHomeEnvVariable.ts | 0 .../{ => tools}/healthchecks/androidNDK.ts | 0 .../{ => tools}/healthchecks/androidSDK.ts | 0 .../{ => tools}/healthchecks/androidStudio.ts | 0 .../src/{ => tools}/healthchecks/cocoaPods.ts | 0 .../src/{ => tools}/healthchecks/common.ts | 0 .../src/{ => tools}/healthchecks/index.ts | 0 .../src/{ => tools}/healthchecks/iosDeploy.ts | 0 .../src/{ => tools}/healthchecks/jdk.ts | 0 .../src/{ => tools}/healthchecks/nodeJS.ts | 0 .../healthchecks/packageManagers.ts | 0 .../src/{ => tools}/healthchecks/watchman.ts | 0 .../src/{ => tools}/healthchecks/xcode.ts | 0 .../src/{ => tools}/printFixOptions.ts | 0 .../src/{ => tools}/runAutomaticFix.ts | 0 packages/cli-doctor/src/{ => tools}/types.ts | 0 .../src/{ => tools}/versionRanges.ts | 0 packages/cli-server-api/tsconfig.json | 5 +--- packages/cli/package.json | 10 ++------ packages/cli/src/commands/index.ts | 7 +++--- packages/cli/src/tools/brewInstall.ts | 2 +- packages/cli/src/tools/install.ts | 2 +- 35 files changed, 55 insertions(+), 46 deletions(-) rename packages/{cli/src/commands/info => cli-doctor/src/commands}/__tests__/info.test.ts (100%) create mode 100644 packages/cli-doctor/src/commands/doctor.ts rename packages/{cli/src/commands/info => cli-doctor/src/commands}/info.ts (93%) rename packages/cli-doctor/src/{ => tools}/checkInstallation.ts (100%) rename packages/cli-doctor/src/{ => tools}/doctor.ts (98%) rename packages/{cli => cli-doctor}/src/tools/envinfo.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/__tests__/androidHomeEnvVariable.test.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/__tests__/androidNDK.test.ts (96%) rename packages/cli-doctor/src/{ => tools}/healthchecks/__tests__/androidSDK.test.ts (98%) rename packages/cli-doctor/src/{ => tools}/healthchecks/__tests__/androidStudio.test.ts (96%) rename packages/cli-doctor/src/{ => tools}/healthchecks/__tests__/jdk.test.ts (97%) rename packages/cli-doctor/src/{ => tools}/healthchecks/androidHomeEnvVariable.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/androidNDK.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/androidSDK.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/androidStudio.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/cocoaPods.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/common.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/index.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/iosDeploy.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/jdk.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/nodeJS.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/packageManagers.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/watchman.ts (100%) rename packages/cli-doctor/src/{ => tools}/healthchecks/xcode.ts (100%) rename packages/cli-doctor/src/{ => tools}/printFixOptions.ts (100%) rename packages/cli-doctor/src/{ => tools}/runAutomaticFix.ts (100%) rename packages/cli-doctor/src/{ => tools}/types.ts (100%) rename packages/cli-doctor/src/{ => tools}/versionRanges.ts (100%) diff --git a/packages/cli-doctor/package.json b/packages/cli-doctor/package.json index 2c60b853c..364885f57 100644 --- a/packages/cli-doctor/package.json +++ b/packages/cli-doctor/package.json @@ -8,10 +8,18 @@ }, "types": "build/index.d.ts", "dependencies": { - "@react-native-community/cli-tools": "^6.0.0-rc.0", + "@react-native-community/cli-tools": "^6.2.0", "chalk": "^3.0.0", + "envinfo": "^7.7.2", "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" + "ip": "^1.1.5", + "command-exists": "^1.2.8", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "strip-ansi": "^5.2.0", + "ora": "^6.0.0", + "execa": "^1.0.0", + "wcwidth": "^1.0.1" }, "files": [ "build", @@ -19,8 +27,12 @@ "!*.map" ], "devDependencies": { + "@types/command-exists": "^1.2.0", "@react-native-community/cli-types": "^6.0.0", - "@types/ip": "^1.1.0" + "@types/ip": "^1.1.0", + "@types/semver": "^6.0.2", + "@types/wcwidth": "^1.0.0", + "@types/prompts": "^2.0.9" }, "homepage": "https://github.com/react-native-community/cli/tree/master/packages/cli-doctor", "repository": { diff --git a/packages/cli/src/commands/info/__tests__/info.test.ts b/packages/cli-doctor/src/commands/__tests__/info.test.ts similarity index 100% rename from packages/cli/src/commands/info/__tests__/info.test.ts rename to packages/cli-doctor/src/commands/__tests__/info.test.ts diff --git a/packages/cli-doctor/src/commands/doctor.ts b/packages/cli-doctor/src/commands/doctor.ts new file mode 100644 index 000000000..3b0b243f0 --- /dev/null +++ b/packages/cli-doctor/src/commands/doctor.ts @@ -0,0 +1,21 @@ +import doctor from './doctor'; + +export default { + func: doctor, + detached: true, + name: 'doctor', + description: + '[EXPERIMENTAL] Diagnose and fix common Node.js, iOS, Android & React Native issues.', + options: [ + { + name: '--fix', + description: 'Attempt to fix all diagnosed issues.', + }, + { + name: '--contributor', + description: + 'Add healthchecks required to installations required for contributing to React Native.', + }, + ], + }; + \ No newline at end of file diff --git a/packages/cli/src/commands/info/info.ts b/packages/cli-doctor/src/commands/info.ts similarity index 93% rename from packages/cli/src/commands/info/info.ts rename to packages/cli-doctor/src/commands/info.ts index b2999fca3..f9a24e627 100644 --- a/packages/cli/src/commands/info/info.ts +++ b/packages/cli-doctor/src/commands/info.ts @@ -6,7 +6,7 @@ */ // @ts-ignore untyped -import getEnvironmentInfo from '../../tools/envinfo'; +import getEnvironmentInfo from '../tools/envinfo'; import {logger, releaseChecker} from '@react-native-community/cli-tools'; import {Config} from '@react-native-community/cli-types'; diff --git a/packages/cli-doctor/src/index.ts b/packages/cli-doctor/src/index.ts index f7e6119e4..be08caa42 100644 --- a/packages/cli-doctor/src/index.ts +++ b/packages/cli-doctor/src/index.ts @@ -1,20 +1,6 @@ -import doctor from './doctor'; +import doctor from './commands/doctor'; +import info from './commands/info'; -export default { - func: doctor, - detached: true, - name: 'doctor', - description: - '[EXPERIMENTAL] Diagnose and fix common Node.js, iOS, Android & React Native issues.', - options: [ - { - name: '--fix', - description: 'Attempt to fix all diagnosed issues.', - }, - { - name: '--contributor', - description: - 'Add healthchecks required to installations required for contributing to React Native.', - }, - ], -}; +export {logManualInstallation, logError} from './tools/healthchecks/common'; + +export const commands = {info, doctor}; diff --git a/packages/cli-doctor/src/checkInstallation.ts b/packages/cli-doctor/src/tools/checkInstallation.ts similarity index 100% rename from packages/cli-doctor/src/checkInstallation.ts rename to packages/cli-doctor/src/tools/checkInstallation.ts diff --git a/packages/cli-doctor/src/doctor.ts b/packages/cli-doctor/src/tools/doctor.ts similarity index 98% rename from packages/cli-doctor/src/doctor.ts rename to packages/cli-doctor/src/tools/doctor.ts index 30c898672..ffc75d69a 100644 --- a/packages/cli-doctor/src/doctor.ts +++ b/packages/cli-doctor/src/tools/doctor.ts @@ -10,7 +10,7 @@ import { HealthCheckInterface, } from '@react-native-community/cli-types'; import {HealthCheckCategoryResult, HealthCheckResult} from './types'; -import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; +import getEnvironmentInfo from './envinfo'; import {logMessage} from './healthchecks/common'; const printCategory = ({label, key}: {label: string; key: number}) => { diff --git a/packages/cli/src/tools/envinfo.ts b/packages/cli-doctor/src/tools/envinfo.ts similarity index 100% rename from packages/cli/src/tools/envinfo.ts rename to packages/cli-doctor/src/tools/envinfo.ts diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/__tests__/androidHomeEnvVariable.test.ts rename to packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts similarity index 96% rename from packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts rename to packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts index 7d2b65d56..987129fe1 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidNDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts @@ -1,5 +1,5 @@ import androidNDK from '../androidNDK'; -import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; +import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts similarity index 98% rename from packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts rename to packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts index fd7cee898..526f4b1b2 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidSDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts @@ -3,7 +3,7 @@ import {join} from 'path'; import execa from 'execa'; import {cleanup, writeFiles} from '../../../../../jest/helpers'; import androidSDK from '../androidSDK'; -import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; +import getEnvironmentInfo from '../../envinfo'; import * as downloadAndUnzip from '@react-native-community/cli/src/tools/downloadAndUnzip'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; diff --git a/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts similarity index 96% rename from packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts rename to packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts index 3a506d836..78aa74af1 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/androidStudio.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts @@ -1,6 +1,6 @@ import execa from 'execa'; import androidStudio from '../androidStudio'; -import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; +import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts similarity index 97% rename from packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts rename to packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts index b032135eb..e14418b1b 100644 --- a/packages/cli-doctor/src/healthchecks/__tests__/jdk.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts @@ -1,6 +1,6 @@ import execa from 'execa'; import jdk from '../jdk'; -import getEnvironmentInfo from '@react-native-community/cli/src/tools/envinfo'; +import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/healthchecks/androidHomeEnvVariable.ts b/packages/cli-doctor/src/tools/healthchecks/androidHomeEnvVariable.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/androidHomeEnvVariable.ts rename to packages/cli-doctor/src/tools/healthchecks/androidHomeEnvVariable.ts diff --git a/packages/cli-doctor/src/healthchecks/androidNDK.ts b/packages/cli-doctor/src/tools/healthchecks/androidNDK.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/androidNDK.ts rename to packages/cli-doctor/src/tools/healthchecks/androidNDK.ts diff --git a/packages/cli-doctor/src/healthchecks/androidSDK.ts b/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/androidSDK.ts rename to packages/cli-doctor/src/tools/healthchecks/androidSDK.ts diff --git a/packages/cli-doctor/src/healthchecks/androidStudio.ts b/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/androidStudio.ts rename to packages/cli-doctor/src/tools/healthchecks/androidStudio.ts diff --git a/packages/cli-doctor/src/healthchecks/cocoaPods.ts b/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/cocoaPods.ts rename to packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts diff --git a/packages/cli-doctor/src/healthchecks/common.ts b/packages/cli-doctor/src/tools/healthchecks/common.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/common.ts rename to packages/cli-doctor/src/tools/healthchecks/common.ts diff --git a/packages/cli-doctor/src/healthchecks/index.ts b/packages/cli-doctor/src/tools/healthchecks/index.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/index.ts rename to packages/cli-doctor/src/tools/healthchecks/index.ts diff --git a/packages/cli-doctor/src/healthchecks/iosDeploy.ts b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/iosDeploy.ts rename to packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts diff --git a/packages/cli-doctor/src/healthchecks/jdk.ts b/packages/cli-doctor/src/tools/healthchecks/jdk.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/jdk.ts rename to packages/cli-doctor/src/tools/healthchecks/jdk.ts diff --git a/packages/cli-doctor/src/healthchecks/nodeJS.ts b/packages/cli-doctor/src/tools/healthchecks/nodeJS.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/nodeJS.ts rename to packages/cli-doctor/src/tools/healthchecks/nodeJS.ts diff --git a/packages/cli-doctor/src/healthchecks/packageManagers.ts b/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/packageManagers.ts rename to packages/cli-doctor/src/tools/healthchecks/packageManagers.ts diff --git a/packages/cli-doctor/src/healthchecks/watchman.ts b/packages/cli-doctor/src/tools/healthchecks/watchman.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/watchman.ts rename to packages/cli-doctor/src/tools/healthchecks/watchman.ts diff --git a/packages/cli-doctor/src/healthchecks/xcode.ts b/packages/cli-doctor/src/tools/healthchecks/xcode.ts similarity index 100% rename from packages/cli-doctor/src/healthchecks/xcode.ts rename to packages/cli-doctor/src/tools/healthchecks/xcode.ts diff --git a/packages/cli-doctor/src/printFixOptions.ts b/packages/cli-doctor/src/tools/printFixOptions.ts similarity index 100% rename from packages/cli-doctor/src/printFixOptions.ts rename to packages/cli-doctor/src/tools/printFixOptions.ts diff --git a/packages/cli-doctor/src/runAutomaticFix.ts b/packages/cli-doctor/src/tools/runAutomaticFix.ts similarity index 100% rename from packages/cli-doctor/src/runAutomaticFix.ts rename to packages/cli-doctor/src/tools/runAutomaticFix.ts diff --git a/packages/cli-doctor/src/types.ts b/packages/cli-doctor/src/tools/types.ts similarity index 100% rename from packages/cli-doctor/src/types.ts rename to packages/cli-doctor/src/tools/types.ts diff --git a/packages/cli-doctor/src/versionRanges.ts b/packages/cli-doctor/src/tools/versionRanges.ts similarity index 100% rename from packages/cli-doctor/src/versionRanges.ts rename to packages/cli-doctor/src/tools/versionRanges.ts diff --git a/packages/cli-server-api/tsconfig.json b/packages/cli-server-api/tsconfig.json index da7c59b3f..8b5ecd686 100644 --- a/packages/cli-server-api/tsconfig.json +++ b/packages/cli-server-api/tsconfig.json @@ -4,8 +4,5 @@ "rootDir": "src", "outDir": "build" }, - "references": [ - {"path": "../tools"}, - {"path": "../debugger-ui"} - ] + "references": [{"path": "../tools"}, {"path": "../debugger-ui"}] } diff --git a/packages/cli/package.json b/packages/cli/package.json index 3aa0560f0..9da36634e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -25,19 +25,17 @@ }, "dependencies": { "@react-native-community/cli-debugger-ui": "^6.0.0-rc.0", + "@react-native-community/cli-doctor": "^6.0.0", "@react-native-community/cli-hermes": "^6.3.0", "@react-native-community/cli-plugin-metro": "^6.4.0", "@react-native-community/cli-server-api": "^6.4.0", "@react-native-community/cli-tools": "^6.2.0", "@react-native-community/cli-types": "^6.0.0", - "@react-native-community/cli-doctor": "^6.0.0", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", - "command-exists": "^1.2.8", "commander": "^2.19.0", "cosmiconfig": "^5.1.0", "deepmerge": "^3.2.0", - "envinfo": "^7.7.2", "execa": "^1.0.0", "find-up": "^4.1.0", "fs-extra": "^8.1.0", @@ -53,15 +51,12 @@ "prompts": "^2.4.0", "semver": "^6.3.0", "serve-static": "^1.13.1", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" + "sudo-prompt": "^9.0.0" }, "peerDependencies": { "react-native": "*" }, "devDependencies": { - "@types/command-exists": "^1.2.0", "@types/cosmiconfig": "^5.0.3", "@types/fs-extra": "^8.1.0", "@types/glob": "^7.1.1", @@ -71,7 +66,6 @@ "@types/minimist": "^1.2.0", "@types/prompts": "^2.0.9", "@types/semver": "^6.0.2", - "@types/wcwidth": "^1.0.0", "slash": "^3.0.0", "snapshot-diff": "^0.7.0" }, diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 989494e41..c9e808952 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -5,22 +5,21 @@ import unlink from './link/unlink'; import install from './install/install'; import uninstall from './install/uninstall'; import upgrade from './upgrade/upgrade'; -import info from './info/info'; +import {commands as doctorCommands} from '@react-native-community/cli-doctor'; import config from './config/config'; import init from './init'; -import doctor from '@react-native-community/cli-doctor'; import profileHermes from '@react-native-community/cli-hermes'; export const projectCommands = [ ...metroCommands, + doctorCommands.info, link, unlink, install, uninstall, upgrade, - info, config, profileHermes, ] as Command[]; -export const detachedCommands = [init, doctor] as DetachedCommand[]; +export const detachedCommands = [init, doctorCommands.doctor] as DetachedCommand[]; diff --git a/packages/cli/src/tools/brewInstall.ts b/packages/cli/src/tools/brewInstall.ts index 09987f817..d5f6d7905 100644 --- a/packages/cli/src/tools/brewInstall.ts +++ b/packages/cli/src/tools/brewInstall.ts @@ -1,6 +1,6 @@ import execa from 'execa'; import type {Ora} from 'ora'; -import {logError} from '../commands/doctor/healthchecks/common'; +import {logError} from '@react-native-community/cli-doctor'; type InstallArgs = { pkg: string; diff --git a/packages/cli/src/tools/install.ts b/packages/cli/src/tools/install.ts index f9cf0120b..ba1ae01c8 100644 --- a/packages/cli/src/tools/install.ts +++ b/packages/cli/src/tools/install.ts @@ -1,6 +1,6 @@ import type {Ora} from 'ora'; import {brewInstall} from './brewInstall'; -import {logManualInstallation} from '@react-native-community/cli-doctor/src/healthchecks/common'; +import {logManualInstallation} from '@react-native-community/cli-doctor'; type InstallArgs = { pkg: string; From 7d762b2f153a298119a4ccfcb1a8ce5c447c6e22 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 25 Jan 2022 15:51:11 +0100 Subject: [PATCH 06/17] chore: clean-up packages, make config a separate package --- packages/cli-config/package.json | 33 ++ .../src}/__mocks__/index.ts | 0 .../src}/__mocks__/resolveNodeModuleDir.ts | 0 .../__snapshots__/index-test.ts.snap | 0 .../src}/__tests__/findAssets-test.ts | 0 .../src}/__tests__/findDependencies-test.ts | 2 +- .../src}/__tests__/index-test.ts | 2 +- .../src/tools => cli-config/src}/assign.ts | 0 .../tools/config => cli-config/src}/errors.ts | 0 .../config => cli-config/src}/findAssets.ts | 0 .../src}/findDependencies.ts | 0 .../tools/config => cli-config/src}/index.ts | 7 +- .../src/tools => cli-config/src}/merge.ts | 0 .../src}/readConfigFromDisk.ts | 0 .../src}/resolveReactNativePath.ts | 4 +- .../tools/config => cli-config/src}/schema.ts | 0 packages/cli-config/tsconfig.json | 8 + packages/cli-doctor/package.json | 5 +- .../src/commands/__tests__/info.test.ts | 2 +- packages/cli-doctor/src/commands/doctor.ts | 301 ++++++++++++++++-- packages/cli-doctor/src/index.ts | 4 +- .../src/tools/brewInstall.ts | 6 +- .../src/tools/deleteFile.ts | 0 packages/cli-doctor/src/tools/doctor.ts | 266 ---------------- .../src/tools/downloadAndUnzip.ts | 6 +- .../__tests__/androidHomeEnvVariable.test.ts | 2 +- .../healthchecks/__tests__/androidNDK.test.ts | 2 +- .../healthchecks/__tests__/androidSDK.test.ts | 10 +- .../__tests__/androidStudio.test.ts | 4 +- .../tools/healthchecks/__tests__/jdk.test.ts | 6 +- .../src/tools/healthchecks/androidSDK.ts | 11 +- .../src/tools/healthchecks/androidStudio.ts | 8 +- .../src/tools/healthchecks/cocoaPods.ts | 4 +- .../src/tools/healthchecks/common.ts | 5 +- .../src/tools/healthchecks/index.ts | 2 +- .../src/tools/healthchecks/iosDeploy.ts | 4 +- .../cli-doctor/src/tools/healthchecks/jdk.ts | 5 +- .../src/tools/healthchecks/packageManagers.ts | 2 +- .../src/tools/healthchecks/watchman.ts | 2 +- .../{cli => cli-doctor}/src/tools/install.ts | 6 +- .../src/tools/installPods.ts | 13 +- .../cli-doctor/src/tools/runAutomaticFix.ts | 8 +- .../{cli => cli-doctor}/src/tools/unzip.ts | 0 .../__tests__/androidWinHelpers.test.ts | 0 .../src/tools/windows/androidWinHelpers.ts | 0 .../src/tools/windows/create-shortcut.ts | 0 .../src/tools/windows/environmentVariables.ts | 0 .../src/tools/windows/executeWinCommand.ts | 0 .../src/tools/windows/processorType.ts | 0 packages/cli-doctor/tsconfig.json | 1 + packages/cli-types/package.json | 3 - packages/cli-types/src/index.ts | 1 - packages/cli/package.json | 15 +- packages/cli/src/commands/init/init.ts | 5 +- packages/cli/src/commands/init/initCompat.ts | 2 +- packages/cli/src/commands/install/install.ts | 2 +- .../src/commands/link/__tests__/link.test.ts | 3 +- .../__tests__/upgrade-testing-methods.ts | 3 +- packages/cli/src/commands/upgrade/upgrade.ts | 2 +- packages/cli/src/index.ts | 2 +- .../src/tools/config/resolveNodeModuleDir.ts | 2 - packages/cli/tsconfig.json | 3 +- .../platform-ios/src/commands/runIOS/index.ts | 1 + packages/tools/package.json | 1 + .../src}/__tests__/findProjectRoot-test.ts | 2 +- .../config => tools/src}/findProjectRoot.ts | 2 +- packages/tools/src/index.ts | 2 + .../{cli/src/tools => tools/src}/loader.ts | 4 +- 68 files changed, 409 insertions(+), 387 deletions(-) create mode 100644 packages/cli-config/package.json rename packages/{cli/src/tools/config => cli-config/src}/__mocks__/index.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/__mocks__/resolveNodeModuleDir.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/__tests__/__snapshots__/index-test.ts.snap (100%) rename packages/{cli/src/tools/config => cli-config/src}/__tests__/findAssets-test.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/__tests__/findDependencies-test.ts (93%) rename packages/{cli/src/tools/config => cli-config/src}/__tests__/index-test.ts (99%) rename packages/{cli/src/tools => cli-config/src}/assign.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/errors.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/findAssets.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/findDependencies.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/index.ts (95%) rename packages/{cli/src/tools => cli-config/src}/merge.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/readConfigFromDisk.ts (100%) rename packages/{cli/src/tools/config => cli-config/src}/resolveReactNativePath.ts (83%) rename packages/{cli/src/tools/config => cli-config/src}/schema.ts (100%) create mode 100644 packages/cli-config/tsconfig.json rename packages/{cli => cli-doctor}/src/tools/brewInstall.ts (83%) rename packages/{cli => cli-doctor}/src/tools/deleteFile.ts (100%) delete mode 100644 packages/cli-doctor/src/tools/doctor.ts rename packages/{cli => cli-doctor}/src/tools/downloadAndUnzip.ts (86%) rename packages/{cli => cli-doctor}/src/tools/install.ts (78%) rename packages/{cli => cli-doctor}/src/tools/installPods.ts (95%) rename packages/{cli => cli-doctor}/src/tools/unzip.ts (100%) rename packages/{cli => cli-doctor}/src/tools/windows/__tests__/androidWinHelpers.test.ts (100%) rename packages/{cli => cli-doctor}/src/tools/windows/androidWinHelpers.ts (100%) rename packages/{cli => cli-doctor}/src/tools/windows/create-shortcut.ts (100%) rename packages/{cli => cli-doctor}/src/tools/windows/environmentVariables.ts (100%) rename packages/{cli => cli-doctor}/src/tools/windows/executeWinCommand.ts (100%) rename packages/{cli => cli-doctor}/src/tools/windows/processorType.ts (100%) delete mode 100644 packages/cli/src/tools/config/resolveNodeModuleDir.ts rename packages/{cli/src/tools/config => tools/src}/__tests__/findProjectRoot-test.ts (95%) rename packages/{cli/src/tools/config => tools/src}/findProjectRoot.ts (92%) rename packages/{cli/src/tools => tools/src}/loader.ts (94%) diff --git a/packages/cli-config/package.json b/packages/cli-config/package.json new file mode 100644 index 000000000..ecca1884b --- /dev/null +++ b/packages/cli-config/package.json @@ -0,0 +1,33 @@ +{ + "name": "@react-native-community/cli-config", + "version": "6.0.1", + "license": "MIT", + "main": "build/index.js", + "publishConfig": { + "access": "public" + }, + "types": "build/index.d.ts", + "dependencies": { + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "@react-native-community/cli-tools": "^6.2.0", + "joi": "^17.2.1", + "glob": "^7.1.3" + }, + "files": [ + "build", + "!*.d.ts", + "!*.map" + ], + "devDependencies": { + "@types/cosmiconfig": "^5.0.3", + "@react-native-community/cli-types": "^6.0.0", + "@types/glob": "^7.1.1" + }, + "homepage": "https://github.com/react-native-community/cli/tree/master/packages/cli-config", + "repository": { + "type": "git", + "url": "https://github.com/react-native-community/cli.git", + "directory": "packages/cli-config" + } +} diff --git a/packages/cli/src/tools/config/__mocks__/index.ts b/packages/cli-config/src/__mocks__/index.ts similarity index 100% rename from packages/cli/src/tools/config/__mocks__/index.ts rename to packages/cli-config/src/__mocks__/index.ts diff --git a/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.ts b/packages/cli-config/src/__mocks__/resolveNodeModuleDir.ts similarity index 100% rename from packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.ts rename to packages/cli-config/src/__mocks__/resolveNodeModuleDir.ts diff --git a/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.ts.snap b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap similarity index 100% rename from packages/cli/src/tools/config/__tests__/__snapshots__/index-test.ts.snap rename to packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap diff --git a/packages/cli/src/tools/config/__tests__/findAssets-test.ts b/packages/cli-config/src/__tests__/findAssets-test.ts similarity index 100% rename from packages/cli/src/tools/config/__tests__/findAssets-test.ts rename to packages/cli-config/src/__tests__/findAssets-test.ts diff --git a/packages/cli/src/tools/config/__tests__/findDependencies-test.ts b/packages/cli-config/src/__tests__/findDependencies-test.ts similarity index 93% rename from packages/cli/src/tools/config/__tests__/findDependencies-test.ts rename to packages/cli-config/src/__tests__/findDependencies-test.ts index 084ee49d7..4c3ea08eb 100644 --- a/packages/cli/src/tools/config/__tests__/findDependencies-test.ts +++ b/packages/cli-config/src/__tests__/findDependencies-test.ts @@ -3,7 +3,7 @@ import { cleanup, writeFiles, getTempDirectory, -} from '../../../../../../jest/helpers'; +} from '../../../../jest/helpers'; beforeEach(async () => { await cleanup(DIR); diff --git a/packages/cli/src/tools/config/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts similarity index 99% rename from packages/cli/src/tools/config/__tests__/index-test.ts rename to packages/cli-config/src/__tests__/index-test.ts index f21f475c1..41973ff21 100644 --- a/packages/cli/src/tools/config/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -6,7 +6,7 @@ import { cleanup, writeFiles, getTempDirectory, -} from '../../../../../../jest/helpers'; +} from '../../../../jest/helpers'; jest.mock('../resolveNodeModuleDir'); diff --git a/packages/cli/src/tools/assign.ts b/packages/cli-config/src/assign.ts similarity index 100% rename from packages/cli/src/tools/assign.ts rename to packages/cli-config/src/assign.ts diff --git a/packages/cli/src/tools/config/errors.ts b/packages/cli-config/src/errors.ts similarity index 100% rename from packages/cli/src/tools/config/errors.ts rename to packages/cli-config/src/errors.ts diff --git a/packages/cli/src/tools/config/findAssets.ts b/packages/cli-config/src/findAssets.ts similarity index 100% rename from packages/cli/src/tools/config/findAssets.ts rename to packages/cli-config/src/findAssets.ts diff --git a/packages/cli/src/tools/config/findDependencies.ts b/packages/cli-config/src/findDependencies.ts similarity index 100% rename from packages/cli/src/tools/config/findDependencies.ts rename to packages/cli-config/src/findDependencies.ts diff --git a/packages/cli/src/tools/config/index.ts b/packages/cli-config/src/index.ts similarity index 95% rename from packages/cli/src/tools/config/index.ts rename to packages/cli-config/src/index.ts index 7f427a44a..47737b145 100644 --- a/packages/cli/src/tools/config/index.ts +++ b/packages/cli-config/src/index.ts @@ -7,17 +7,16 @@ import { UserConfig, Config, } from '@react-native-community/cli-types'; -import {logger, inlineString} from '@react-native-community/cli-tools'; +import {logger, inlineString, findProjectRoot} from '@react-native-community/cli-tools'; import findDependencies from './findDependencies'; -import findProjectRoot from './findProjectRoot'; import resolveReactNativePath from './resolveReactNativePath'; import findAssets from './findAssets'; import { readConfigFromDisk, readDependencyConfigFromDisk, } from './readConfigFromDisk'; -import assign from '../assign'; -import merge from '../merge'; +import assign from './assign'; +import merge from './merge'; import resolveNodeModuleDir from './resolveNodeModuleDir'; function getDependencyConfig( diff --git a/packages/cli/src/tools/merge.ts b/packages/cli-config/src/merge.ts similarity index 100% rename from packages/cli/src/tools/merge.ts rename to packages/cli-config/src/merge.ts diff --git a/packages/cli/src/tools/config/readConfigFromDisk.ts b/packages/cli-config/src/readConfigFromDisk.ts similarity index 100% rename from packages/cli/src/tools/config/readConfigFromDisk.ts rename to packages/cli-config/src/readConfigFromDisk.ts diff --git a/packages/cli/src/tools/config/resolveReactNativePath.ts b/packages/cli-config/src/resolveReactNativePath.ts similarity index 83% rename from packages/cli/src/tools/config/resolveReactNativePath.ts rename to packages/cli-config/src/resolveReactNativePath.ts index 014ee0804..1702c0113 100644 --- a/packages/cli/src/tools/config/resolveReactNativePath.ts +++ b/packages/cli-config/src/resolveReactNativePath.ts @@ -1,6 +1,4 @@ -import {CLIError} from '@react-native-community/cli-tools'; - -import resolveNodeModuleDir from './resolveNodeModuleDir'; +import {CLIError, resolveNodeModuleDir} from '@react-native-community/cli-tools'; /** * Finds path to React Native inside `node_modules` or throws diff --git a/packages/cli/src/tools/config/schema.ts b/packages/cli-config/src/schema.ts similarity index 100% rename from packages/cli/src/tools/config/schema.ts rename to packages/cli-config/src/schema.ts diff --git a/packages/cli-config/tsconfig.json b/packages/cli-config/tsconfig.json new file mode 100644 index 000000000..1ec7ea396 --- /dev/null +++ b/packages/cli-config/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "build" + }, + "references": [{"path": "../tools"}, {"path": "../cli-types"}] +} diff --git a/packages/cli-doctor/package.json b/packages/cli-doctor/package.json index 364885f57..3d6c1c384 100644 --- a/packages/cli-doctor/package.json +++ b/packages/cli-doctor/package.json @@ -9,17 +9,20 @@ "types": "build/index.d.ts", "dependencies": { "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-config": "^6.0.1", "chalk": "^3.0.0", "envinfo": "^7.7.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5", + "node-stream-zip": "^1.9.1", "command-exists": "^1.2.8", "prompts": "^2.4.0", "semver": "^6.3.0", "strip-ansi": "^5.2.0", "ora": "^6.0.0", "execa": "^1.0.0", - "wcwidth": "^1.0.1" + "wcwidth": "^1.0.1", + "sudo-prompt": "^9.0.0" }, "files": [ "build", diff --git a/packages/cli-doctor/src/commands/__tests__/info.test.ts b/packages/cli-doctor/src/commands/__tests__/info.test.ts index 28ba358b0..15b54dbbb 100644 --- a/packages/cli-doctor/src/commands/__tests__/info.test.ts +++ b/packages/cli-doctor/src/commands/__tests__/info.test.ts @@ -1,6 +1,6 @@ import info from '../info'; import {logger} from '@react-native-community/cli-tools'; -import loadConfig from '../../../tools/config'; +import loadConfig from '@react-native-community/cli-config'; jest.mock('../../../tools/config'); diff --git a/packages/cli-doctor/src/commands/doctor.ts b/packages/cli-doctor/src/commands/doctor.ts index 3b0b243f0..a5f52cfca 100644 --- a/packages/cli-doctor/src/commands/doctor.ts +++ b/packages/cli-doctor/src/commands/doctor.ts @@ -1,21 +1,286 @@ -import doctor from './doctor'; +import chalk from 'chalk'; +import {logger} from '@react-native-community/cli-tools'; +import {getHealthchecks, HEALTHCHECK_TYPES} from '../tools/healthchecks'; +import {getLoader} from '@react-native-community/cli-tools/src/loader'; +import printFixOptions, {KEYS} from '../tools/printFixOptions'; +import runAutomaticFix, {AUTOMATIC_FIX_LEVELS} from '../tools/runAutomaticFix'; +import { + DetachedCommandFunction, + HealthCheckCategory, + HealthCheckInterface, +} from '@react-native-community/cli-types'; +import {HealthCheckCategoryResult, HealthCheckResult} from '../tools/types'; +import getEnvironmentInfo from '../tools/envinfo'; +import {logMessage} from '../tools/healthchecks/common'; -export default { - func: doctor, - detached: true, - name: 'doctor', - description: - '[EXPERIMENTAL] Diagnose and fix common Node.js, iOS, Android & React Native issues.', - options: [ - { - name: '--fix', - description: 'Attempt to fix all diagnosed issues.', - }, - { - name: '--contributor', - description: - 'Add healthchecks required to installations required for contributing to React Native.', - }, - ], +const printCategory = ({label, key}: {label: string; key: number}) => { + if (key > 0) { + logger.log(); + } + + logger.log(chalk.dim(label)); +}; + +const printVersions = ({ + version, + versions, + versionRange, +}: { + version?: 'Not Found' | string; + versions?: [string] | string; + versionRange: string; +}) => { + if (versions) { + const versionsToShow = Array.isArray(versions) + ? versions.join(', ') + : 'N/A'; + + logMessage(`- Versions found: ${chalk.red(versionsToShow)}`); + logMessage(`- Version supported: ${chalk.green(versionRange)}`); + + return; + } + + const versionsToShow = version && version !== 'Not Found' ? version : 'N/A'; + + logMessage(`- Version found: ${chalk.red(versionsToShow)}`); + logMessage(`- Version supported: ${chalk.green(versionRange)}`); + + return; +}; + +const printIssue = ({ + label, + needsToBeFixed, + version, + versions, + versionRange, + isRequired, + description, +}: HealthCheckResult) => { + const symbol = needsToBeFixed + ? isRequired + ? chalk.red('✖') + : chalk.yellow('●') + : chalk.green('✓'); + + const descriptionToShow = description ? ` - ${description}` : ''; + + logger.log(` ${symbol} ${label}${descriptionToShow}`); + + if (needsToBeFixed && versionRange) { + return printVersions({version, versions, versionRange}); + } +}; + +const printOverallStats = ({ + errors, + warnings, +}: { + errors: number; + warnings: number; +}) => { + logger.log(`\n${chalk.bold('Errors:')} ${errors}`); + logger.log(`${chalk.bold('Warnings:')} ${warnings}`); +}; + +type FlagsT = { + fix: boolean | void; + contributor: boolean | void; +}; + +/** + * Given a `healthcheck` and a `platform`, returns the specific fix for + * it or the fallback one if there is not one (`runAutomaticFix`). + */ +const getAutomaticFixForPlatform = ( + healthcheck: HealthCheckInterface, + platform: NodeJS.Platform, +) => { + switch (platform) { + case 'win32': + return healthcheck.win32AutomaticFix || healthcheck.runAutomaticFix; + case 'darwin': + return healthcheck.darwinAutomaticFix || healthcheck.runAutomaticFix; + case 'linux': + return healthcheck.linuxAutomaticFix || healthcheck.runAutomaticFix; + default: + return healthcheck.runAutomaticFix; + } +}; + +const doctorCommand = (async (_, options) => { + const Loader = getLoader(); + const loader = new Loader(); + + loader.start('Running diagnostics...'); + + const environmentInfo = await getEnvironmentInfo(); + + const iterateOverHealthChecks = async ({ + label, + healthchecks, + }: HealthCheckCategory): Promise => ({ + label, + healthchecks: ( + await Promise.all( + healthchecks.map(async (healthcheck) => { + if (healthcheck.visible === false) { + return; + } + + const { + needsToBeFixed, + version, + versions, + versionRange, + } = await healthcheck.getDiagnostics(environmentInfo); + + // Assume that it's required unless specified otherwise + const isRequired = healthcheck.isRequired !== false; + const isWarning = needsToBeFixed && !isRequired; + + return { + label: healthcheck.label, + needsToBeFixed: Boolean(needsToBeFixed), + version, + versions, + versionRange, + description: healthcheck.description, + runAutomaticFix: getAutomaticFixForPlatform( + healthcheck, + process.platform, + ), + isRequired, + type: needsToBeFixed + ? isWarning + ? HEALTHCHECK_TYPES.WARNING + : HEALTHCHECK_TYPES.ERROR + : undefined, + }; + }), + ) + ).filter((healthcheck) => healthcheck !== undefined) as HealthCheckResult[], + }); + + // Remove all the categories that don't have any healthcheck with + // `needsToBeFixed` so they don't show when the user taps to fix encountered + // issues + const removeFixedCategories = (categories: HealthCheckCategoryResult[]) => + categories.filter((category) => + category.healthchecks.some((healthcheck) => healthcheck.needsToBeFixed), + ); + + const iterateOverCategories = (categories: HealthCheckCategory[]) => + Promise.all(categories.map(iterateOverHealthChecks)); + + const healthchecksPerCategory = await iterateOverCategories( + Object.values(getHealthchecks(options)).filter( + (category) => category !== undefined, + ) as HealthCheckCategory[], + ); + + loader.stop(); + + const stats = { + errors: 0, + warnings: 0, + }; + + healthchecksPerCategory.forEach((issueCategory, key) => { + printCategory({...issueCategory, key}); + + issueCategory.healthchecks.forEach((healthcheck) => { + printIssue(healthcheck); + + if (healthcheck.type === HEALTHCHECK_TYPES.WARNING) { + stats.warnings++; + return; + } + + if (healthcheck.type === HEALTHCHECK_TYPES.ERROR) { + stats.errors++; + return; + } + }); + }); + + printOverallStats(stats); + + if (options.fix) { + return await runAutomaticFix({ + healthchecks: removeFixedCategories(healthchecksPerCategory), + automaticFixLevel: AUTOMATIC_FIX_LEVELS.ALL_ISSUES, + stats, + loader, + environmentInfo, + }); + } + + const removeKeyPressListener = () => { + if (typeof process.stdin.setRawMode === 'function') { + process.stdin.setRawMode(false); + } + process.stdin.removeAllListeners('data'); }; + + const onKeyPress = async (key: string) => { + if (key === KEYS.EXIT || key === '\u0003') { + removeKeyPressListener(); + + process.exit(0); + return; + } + + if ( + [KEYS.FIX_ALL_ISSUES, KEYS.FIX_ERRORS, KEYS.FIX_WARNINGS].includes(key) + ) { + removeKeyPressListener(); + + try { + const automaticFixLevel = { + [KEYS.FIX_ALL_ISSUES]: AUTOMATIC_FIX_LEVELS.ALL_ISSUES, + [KEYS.FIX_ERRORS]: AUTOMATIC_FIX_LEVELS.ERRORS, + [KEYS.FIX_WARNINGS]: AUTOMATIC_FIX_LEVELS.WARNINGS, + }; + + await runAutomaticFix({ + healthchecks: removeFixedCategories(healthchecksPerCategory), + automaticFixLevel: automaticFixLevel[key], + stats, + loader, + environmentInfo, + }); + + process.exit(0); + } catch (err) { + // TODO: log error + process.exit(1); + } + } + }; + + if (stats.errors || stats.warnings) { + printFixOptions({onKeyPress}); + } +}) as DetachedCommandFunction; + +export default { + func: doctorCommand, + detached: true, + name: 'doctor', + description: + '[EXPERIMENTAL] Diagnose and fix common Node.js, iOS, Android & React Native issues.', + options: [ + { + name: '--fix', + description: 'Attempt to fix all diagnosed issues.', + }, + { + name: '--contributor', + description: + 'Add healthchecks required to installations required for contributing to React Native.', + }, + ], +}; \ No newline at end of file diff --git a/packages/cli-doctor/src/index.ts b/packages/cli-doctor/src/index.ts index be08caa42..82cb2f602 100644 --- a/packages/cli-doctor/src/index.ts +++ b/packages/cli-doctor/src/index.ts @@ -1,6 +1,6 @@ import doctor from './commands/doctor'; import info from './commands/info'; -export {logManualInstallation, logError} from './tools/healthchecks/common'; - export const commands = {info, doctor}; + +export {default as installPods} from './tools/installPods'; \ No newline at end of file diff --git a/packages/cli/src/tools/brewInstall.ts b/packages/cli-doctor/src/tools/brewInstall.ts similarity index 83% rename from packages/cli/src/tools/brewInstall.ts rename to packages/cli-doctor/src/tools/brewInstall.ts index d5f6d7905..a5c56c3c8 100644 --- a/packages/cli/src/tools/brewInstall.ts +++ b/packages/cli-doctor/src/tools/brewInstall.ts @@ -1,11 +1,11 @@ import execa from 'execa'; -import type {Ora} from 'ora'; -import {logError} from '@react-native-community/cli-doctor'; +import type {Loader} from '@react-native-community/cli-tools'; +import {logError} from './healthchecks/common'; type InstallArgs = { pkg: string; label?: string; - loader: Ora; + loader: Loader; onSuccess?: () => void; onFail?: () => void; }; diff --git a/packages/cli/src/tools/deleteFile.ts b/packages/cli-doctor/src/tools/deleteFile.ts similarity index 100% rename from packages/cli/src/tools/deleteFile.ts rename to packages/cli-doctor/src/tools/deleteFile.ts diff --git a/packages/cli-doctor/src/tools/doctor.ts b/packages/cli-doctor/src/tools/doctor.ts deleted file mode 100644 index ffc75d69a..000000000 --- a/packages/cli-doctor/src/tools/doctor.ts +++ /dev/null @@ -1,266 +0,0 @@ -import chalk from 'chalk'; -import {logger} from '@react-native-community/cli-tools'; -import {getHealthchecks, HEALTHCHECK_TYPES} from './healthchecks'; -import {getLoader} from '@react-native-community/cli/src/tools/loader'; -import printFixOptions, {KEYS} from './printFixOptions'; -import runAutomaticFix, {AUTOMATIC_FIX_LEVELS} from './runAutomaticFix'; -import { - DetachedCommandFunction, - HealthCheckCategory, - HealthCheckInterface, -} from '@react-native-community/cli-types'; -import {HealthCheckCategoryResult, HealthCheckResult} from './types'; -import getEnvironmentInfo from './envinfo'; -import {logMessage} from './healthchecks/common'; - -const printCategory = ({label, key}: {label: string; key: number}) => { - if (key > 0) { - logger.log(); - } - - logger.log(chalk.dim(label)); -}; - -const printVersions = ({ - version, - versions, - versionRange, -}: { - version?: 'Not Found' | string; - versions?: [string] | string; - versionRange: string; -}) => { - if (versions) { - const versionsToShow = Array.isArray(versions) - ? versions.join(', ') - : 'N/A'; - - logMessage(`- Versions found: ${chalk.red(versionsToShow)}`); - logMessage(`- Version supported: ${chalk.green(versionRange)}`); - - return; - } - - const versionsToShow = version && version !== 'Not Found' ? version : 'N/A'; - - logMessage(`- Version found: ${chalk.red(versionsToShow)}`); - logMessage(`- Version supported: ${chalk.green(versionRange)}`); - - return; -}; - -const printIssue = ({ - label, - needsToBeFixed, - version, - versions, - versionRange, - isRequired, - description, -}: HealthCheckResult) => { - const symbol = needsToBeFixed - ? isRequired - ? chalk.red('✖') - : chalk.yellow('●') - : chalk.green('✓'); - - const descriptionToShow = description ? ` - ${description}` : ''; - - logger.log(` ${symbol} ${label}${descriptionToShow}`); - - if (needsToBeFixed && versionRange) { - return printVersions({version, versions, versionRange}); - } -}; - -const printOverallStats = ({ - errors, - warnings, -}: { - errors: number; - warnings: number; -}) => { - logger.log(`\n${chalk.bold('Errors:')} ${errors}`); - logger.log(`${chalk.bold('Warnings:')} ${warnings}`); -}; - -type FlagsT = { - fix: boolean | void; - contributor: boolean | void; -}; - -/** - * Given a `healthcheck` and a `platform`, returns the specific fix for - * it or the fallback one if there is not one (`runAutomaticFix`). - */ -const getAutomaticFixForPlatform = ( - healthcheck: HealthCheckInterface, - platform: NodeJS.Platform, -) => { - switch (platform) { - case 'win32': - return healthcheck.win32AutomaticFix || healthcheck.runAutomaticFix; - case 'darwin': - return healthcheck.darwinAutomaticFix || healthcheck.runAutomaticFix; - case 'linux': - return healthcheck.linuxAutomaticFix || healthcheck.runAutomaticFix; - default: - return healthcheck.runAutomaticFix; - } -}; - -export default (async (_, options) => { - const Loader = getLoader(); - const loader = new Loader(); - - loader.start('Running diagnostics...'); - - const environmentInfo = await getEnvironmentInfo(); - - const iterateOverHealthChecks = async ({ - label, - healthchecks, - }: HealthCheckCategory): Promise => ({ - label, - healthchecks: ( - await Promise.all( - healthchecks.map(async (healthcheck) => { - if (healthcheck.visible === false) { - return; - } - - const { - needsToBeFixed, - version, - versions, - versionRange, - } = await healthcheck.getDiagnostics(environmentInfo); - - // Assume that it's required unless specified otherwise - const isRequired = healthcheck.isRequired !== false; - const isWarning = needsToBeFixed && !isRequired; - - return { - label: healthcheck.label, - needsToBeFixed: Boolean(needsToBeFixed), - version, - versions, - versionRange, - description: healthcheck.description, - runAutomaticFix: getAutomaticFixForPlatform( - healthcheck, - process.platform, - ), - isRequired, - type: needsToBeFixed - ? isWarning - ? HEALTHCHECK_TYPES.WARNING - : HEALTHCHECK_TYPES.ERROR - : undefined, - }; - }), - ) - ).filter((healthcheck) => healthcheck !== undefined) as HealthCheckResult[], - }); - - // Remove all the categories that don't have any healthcheck with - // `needsToBeFixed` so they don't show when the user taps to fix encountered - // issues - const removeFixedCategories = (categories: HealthCheckCategoryResult[]) => - categories.filter((category) => - category.healthchecks.some((healthcheck) => healthcheck.needsToBeFixed), - ); - - const iterateOverCategories = (categories: HealthCheckCategory[]) => - Promise.all(categories.map(iterateOverHealthChecks)); - - const healthchecksPerCategory = await iterateOverCategories( - Object.values(getHealthchecks(options)).filter( - (category) => category !== undefined, - ) as HealthCheckCategory[], - ); - - loader.stop(); - - const stats = { - errors: 0, - warnings: 0, - }; - - healthchecksPerCategory.forEach((issueCategory, key) => { - printCategory({...issueCategory, key}); - - issueCategory.healthchecks.forEach((healthcheck) => { - printIssue(healthcheck); - - if (healthcheck.type === HEALTHCHECK_TYPES.WARNING) { - stats.warnings++; - return; - } - - if (healthcheck.type === HEALTHCHECK_TYPES.ERROR) { - stats.errors++; - return; - } - }); - }); - - printOverallStats(stats); - - if (options.fix) { - return await runAutomaticFix({ - healthchecks: removeFixedCategories(healthchecksPerCategory), - automaticFixLevel: AUTOMATIC_FIX_LEVELS.ALL_ISSUES, - stats, - loader, - environmentInfo, - }); - } - - const removeKeyPressListener = () => { - if (typeof process.stdin.setRawMode === 'function') { - process.stdin.setRawMode(false); - } - process.stdin.removeAllListeners('data'); - }; - - const onKeyPress = async (key: string) => { - if (key === KEYS.EXIT || key === '\u0003') { - removeKeyPressListener(); - - process.exit(0); - return; - } - - if ( - [KEYS.FIX_ALL_ISSUES, KEYS.FIX_ERRORS, KEYS.FIX_WARNINGS].includes(key) - ) { - removeKeyPressListener(); - - try { - const automaticFixLevel = { - [KEYS.FIX_ALL_ISSUES]: AUTOMATIC_FIX_LEVELS.ALL_ISSUES, - [KEYS.FIX_ERRORS]: AUTOMATIC_FIX_LEVELS.ERRORS, - [KEYS.FIX_WARNINGS]: AUTOMATIC_FIX_LEVELS.WARNINGS, - }; - - await runAutomaticFix({ - healthchecks: removeFixedCategories(healthchecksPerCategory), - automaticFixLevel: automaticFixLevel[key], - stats, - loader, - environmentInfo, - }); - - process.exit(0); - } catch (err) { - // TODO: log error - process.exit(1); - } - } - }; - - if (stats.errors || stats.warnings) { - printFixOptions({onKeyPress}); - } -}) as DetachedCommandFunction; diff --git a/packages/cli/src/tools/downloadAndUnzip.ts b/packages/cli-doctor/src/tools/downloadAndUnzip.ts similarity index 86% rename from packages/cli/src/tools/downloadAndUnzip.ts rename to packages/cli-doctor/src/tools/downloadAndUnzip.ts index 874091d76..6da7aac58 100644 --- a/packages/cli/src/tools/downloadAndUnzip.ts +++ b/packages/cli-doctor/src/tools/downloadAndUnzip.ts @@ -1,6 +1,4 @@ -import {fetchToTemp} from '@react-native-community/cli-tools'; - -import * as ora from 'ora'; +import {fetchToTemp, Loader} from '@react-native-community/cli-tools'; import {unzip} from './unzip'; import {deleteFile} from './deleteFile'; @@ -14,7 +12,7 @@ export const downloadAndUnzip = async ({ component, installPath, }: { - loader: ora.Ora; + loader: Loader; component: string; downloadUrl: string; installPath: string; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts index 953d57265..0c13d7b84 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts @@ -1,5 +1,5 @@ import androidHomeEnvVariables from '../androidHomeEnvVariable'; -import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; +import {NoopLoader} from '../../../tools/loader'; import {EnvironmentInfo} from '@react-native-community/cli-types'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts index 987129fe1..a61120971 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts @@ -1,7 +1,7 @@ import androidNDK from '../androidNDK'; import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; +import {NoopLoader} from '../../loader'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts index 526f4b1b2..afd4308f9 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts @@ -1,15 +1,15 @@ import * as os from 'os'; import {join} from 'path'; import execa from 'execa'; -import {cleanup, writeFiles} from '../../../../../jest/helpers'; +import {cleanup, writeFiles} from '../../../../../../jest/helpers'; import androidSDK from '../androidSDK'; import getEnvironmentInfo from '../../envinfo'; -import * as downloadAndUnzip from '@react-native-community/cli/src/tools/downloadAndUnzip'; +import * as downloadAndUnzip from '../../downloadAndUnzip'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; +import {NoopLoader} from '../../../tools/loader'; import * as common from '../common'; -import * as androidWinHelpers from '@react-native-community/cli/src/tools/windows/androidWinHelpers'; -import * as environmentVariables from '@react-native-community/cli/src/tools/windows/environmentVariables'; +import * as androidWinHelpers from '../../windows/androidWinHelpers'; +import * as environmentVariables from '../../windows/environmentVariables'; const logSpy = jest.spyOn(common, 'logManualInstallation'); const {logManualInstallation} = common; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts index 78aa74af1..1bed37f4b 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts @@ -2,9 +2,9 @@ import execa from 'execa'; import androidStudio from '../androidStudio'; import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; +import {NoopLoader} from '../../../tools/loader'; import * as common from '../common'; -import * as downloadAndUnzip from '@react-native-community/cli/src/tools/downloadAndUnzip'; +import * as downloadAndUnzip from '../../downloadAndUnzip'; jest.mock('execa', () => jest.fn()); diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts index e14418b1b..f31244e2b 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts @@ -2,10 +2,10 @@ import execa from 'execa'; import jdk from '../jdk'; import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '@react-native-community/cli/src/tools/loader'; +import {NoopLoader} from '../../../tools/loader'; import * as common from '../common'; -import * as unzip from '@react-native-community/cli/src/tools/unzip'; -import * as deleteFile from '@react-native-community/cli/src/tools/deleteFile'; +import * as unzip from '../../unzip'; +import * as deleteFile from '../../deleteFile'; jest.mock('execa', () => jest.fn()); jest diff --git a/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts b/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts index de18a52bc..d8ddaad35 100644 --- a/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts +++ b/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts @@ -1,13 +1,11 @@ import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; -import {logger} from '@react-native-community/cli-tools'; - +import {logger, findProjectRoot} from '@react-native-community/cli-tools'; import { HealthCheckInterface, EnvironmentInfo, } from '@react-native-community/cli-types'; -import findProjectRoot from '@react-native-community/cli/src/tools/config/findProjectRoot'; import { getAndroidSdkRootInstallation, installComponent, @@ -16,13 +14,12 @@ import { enableHAXM, enableWHPX, createAVD, -} from '@react-native-community/cli/src/tools/windows/androidWinHelpers'; -import {downloadAndUnzip} from '@react-native-community/cli/src/tools/downloadAndUnzip'; - +} from '../windows/androidWinHelpers'; +import {downloadAndUnzip} from '../downloadAndUnzip'; import { setEnvironment, updateEnvironment, -} from '@react-native-community/cli/src/tools/windows/environmentVariables'; +} from '../windows/environmentVariables'; const getBuildToolsVersion = (): string => { let projectRoot = ''; diff --git a/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts b/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts index 7ee8b4ff6..a2e5a9809 100644 --- a/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts +++ b/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts @@ -2,10 +2,10 @@ import {join} from 'path'; import {HealthCheckInterface} from '@react-native-community/cli-types'; -import {downloadAndUnzip} from '@react-native-community/cli/src/tools/downloadAndUnzip'; -import {executeCommand} from '@react-native-community/cli/src/tools/windows/executeWinCommand'; -import {getUserAndroidPath} from '@react-native-community/cli/src/tools/windows/androidWinHelpers'; -import {createShortcut} from '@react-native-community/cli/src/tools/windows/create-shortcut'; +import {downloadAndUnzip} from '../downloadAndUnzip'; +import {executeCommand} from '../windows/executeWinCommand'; +import {getUserAndroidPath} from '../windows/androidWinHelpers'; +import {createShortcut} from '../windows/create-shortcut'; export default { label: 'Android Studio', diff --git a/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts b/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts index 8720b4ed9..323ce8037 100644 --- a/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts +++ b/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts @@ -3,9 +3,9 @@ import {isSoftwareNotInstalled} from '../checkInstallation'; import { promptCocoaPodsInstallationQuestion, runSudo, -} from '@react-native-community/cli/src/tools/installPods'; +} from '../installPods'; import {removeMessage, logError} from './common'; -import {brewInstall} from '@react-native-community/cli/src/tools/brewInstall'; +import {brewInstall} from '../brewInstall'; import {HealthCheckInterface} from '@react-native-community/cli-types'; const label = 'CocoaPods'; diff --git a/packages/cli-doctor/src/tools/healthchecks/common.ts b/packages/cli-doctor/src/tools/healthchecks/common.ts index bec3c9bd2..e9b500e6a 100644 --- a/packages/cli-doctor/src/tools/healthchecks/common.ts +++ b/packages/cli-doctor/src/tools/healthchecks/common.ts @@ -2,8 +2,7 @@ import chalk from 'chalk'; import readline from 'readline'; import wcwidth from 'wcwidth'; import stripAnsi from 'strip-ansi'; -import type {Ora} from 'ora'; -import {logger} from '@react-native-community/cli-tools'; +import {logger, Loader} from '@react-native-community/cli-tools'; // Space is necessary to keep correct ordering on screen const logMessage = (message?: string) => { @@ -62,7 +61,7 @@ const logError = ({ command, }: { healthcheck: string; - loader?: Ora; + loader?: Loader; error: Error; message?: string; command: string; diff --git a/packages/cli-doctor/src/tools/healthchecks/index.ts b/packages/cli-doctor/src/tools/healthchecks/index.ts index 488f3df9f..c1114e978 100644 --- a/packages/cli-doctor/src/tools/healthchecks/index.ts +++ b/packages/cli-doctor/src/tools/healthchecks/index.ts @@ -13,7 +13,7 @@ import { Healthchecks, HealthCheckCategory, } from '@react-native-community/cli-types'; -import loadConfig from '@react-native-community/cli/src/tools/config'; +import loadConfig from '@react-native-community/cli-config'; export const HEALTHCHECK_TYPES = { ERROR: 'ERROR', diff --git a/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts index ee269ee2d..edc3b5801 100644 --- a/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts +++ b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts @@ -5,7 +5,7 @@ import {isSoftwareNotInstalled, PACKAGE_MANAGERS} from '../checkInstallation'; import {packageManager} from './packageManagers'; import {logError, removeMessage} from './common'; import {HealthCheckInterface} from '@react-native-community/cli-types'; -import type {Ora} from 'ora'; +import type {Loader} from '@react-native-community/cli-tools'; const label = 'ios-deploy'; @@ -31,7 +31,7 @@ const installLibrary = async ({ }: { installationCommand: string; packageManagerToUse: 'yarn' | 'npm'; - loader: Ora; + loader: Loader; }) => { try { loader.start(`${label} (installing with ${packageManagerToUse})`); diff --git a/packages/cli-doctor/src/tools/healthchecks/jdk.ts b/packages/cli-doctor/src/tools/healthchecks/jdk.ts index 65b7eea77..36182cd17 100644 --- a/packages/cli-doctor/src/tools/healthchecks/jdk.ts +++ b/packages/cli-doctor/src/tools/healthchecks/jdk.ts @@ -2,12 +2,11 @@ import {join} from 'path'; import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; import {HealthCheckInterface} from '@react-native-community/cli-types'; - -import {downloadAndUnzip} from '@react-native-community/cli/src/tools/downloadAndUnzip'; +import {downloadAndUnzip} from '../downloadAndUnzip'; import { setEnvironment, updateEnvironment, -} from '@react-native-community/cli/src/tools/windows/environmentVariables'; +} from '../windows/environmentVariables'; export default { label: 'JDK', diff --git a/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts b/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts index e98809cf6..874a3f214 100644 --- a/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts +++ b/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts @@ -4,7 +4,7 @@ import { PACKAGE_MANAGERS, doesSoftwareNeedToBeFixed, } from '../checkInstallation'; -import {install} from '@react-native-community/cli/src/tools/install'; +import {install} from '../install'; import {HealthCheckInterface} from '@react-native-community/cli-types'; const packageManager = (() => { diff --git a/packages/cli-doctor/src/tools/healthchecks/watchman.ts b/packages/cli-doctor/src/tools/healthchecks/watchman.ts index 5c8349002..28b399cd5 100644 --- a/packages/cli-doctor/src/tools/healthchecks/watchman.ts +++ b/packages/cli-doctor/src/tools/healthchecks/watchman.ts @@ -1,6 +1,6 @@ import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import {install} from '@react-native-community/cli/src/tools/install'; +import {install} from '../install'; import {HealthCheckInterface} from '@react-native-community/cli-types'; const label = 'Watchman'; diff --git a/packages/cli/src/tools/install.ts b/packages/cli-doctor/src/tools/install.ts similarity index 78% rename from packages/cli/src/tools/install.ts rename to packages/cli-doctor/src/tools/install.ts index ba1ae01c8..647f0ea90 100644 --- a/packages/cli/src/tools/install.ts +++ b/packages/cli-doctor/src/tools/install.ts @@ -1,12 +1,12 @@ -import type {Ora} from 'ora'; +import type {Loader} from '@react-native-community/cli-tools'; import {brewInstall} from './brewInstall'; -import {logManualInstallation} from '@react-native-community/cli-doctor'; +import {logManualInstallation} from './healthchecks/common'; type InstallArgs = { pkg: string; label: string; url: string; - loader: Ora; + loader: Loader; }; async function install({pkg, label, url, loader}: InstallArgs) { diff --git a/packages/cli/src/tools/installPods.ts b/packages/cli-doctor/src/tools/installPods.ts similarity index 95% rename from packages/cli/src/tools/installPods.ts rename to packages/cli-doctor/src/tools/installPods.ts index 6c7629ef4..d3373ddf0 100644 --- a/packages/cli/src/tools/installPods.ts +++ b/packages/cli-doctor/src/tools/installPods.ts @@ -1,10 +1,9 @@ import fs from 'fs'; import execa from 'execa'; import chalk from 'chalk'; -import type {Ora} from 'ora'; +import type {Loader} from '@react-native-community/cli-tools'; import prompts from 'prompts'; -import {logger} from '@react-native-community/cli-tools'; -import {NoopLoader} from './loader'; +import {logger, NoopLoader} from '@react-native-community/cli-tools'; // @ts-ignore untyped import sudo from 'sudo-prompt'; import {brewInstall} from './brewInstall'; @@ -15,7 +14,7 @@ type PromptCocoaPodsInstallation = { }; async function runPodInstall( - loader: Ora, + loader: Loader, directory: string, shouldHandleRepoUpdate: boolean = true, ) { @@ -51,7 +50,7 @@ async function runPodInstall( } } -async function runPodUpdate(loader: Ora) { +async function runPodUpdate(loader: Loader) { try { loader.start( `Updating CocoaPods repositories ${chalk.dim( @@ -128,7 +127,7 @@ async function installCocoaPodsWithGem() { } } -async function installCocoaPods(loader: Ora) { +async function installCocoaPods(loader: Loader) { loader.stop(); const {installMethod} = await promptCocoaPodsInstallationQuestion(); @@ -166,7 +165,7 @@ async function installPods({ loader, }: { directory: string; - loader?: Ora; + loader?: Loader; }) { loader = loader || new NoopLoader(); try { diff --git a/packages/cli-doctor/src/tools/runAutomaticFix.ts b/packages/cli-doctor/src/tools/runAutomaticFix.ts index c3fbc5edd..d32af6691 100644 --- a/packages/cli-doctor/src/tools/runAutomaticFix.ts +++ b/packages/cli-doctor/src/tools/runAutomaticFix.ts @@ -1,9 +1,8 @@ import chalk from 'chalk'; import ora from 'ora'; -import type {Ora} from 'ora'; -import {logger} from '@react-native-community/cli-tools'; -import {HEALTHCHECK_TYPES} from './healthchecks'; +import {logger, Loader} from '@react-native-community/cli-tools'; import {EnvironmentInfo} from '@react-native-community/cli-types'; +import {HEALTHCHECK_TYPES} from './healthchecks'; import {HealthCheckCategoryResult} from './types'; import {logManualInstallation} from './healthchecks/common'; @@ -20,7 +19,7 @@ interface RunAutomaticFixArgs { errors: number; warnings: number; }; - loader: Ora; + loader: Loader; environmentInfo: EnvironmentInfo; } @@ -81,6 +80,7 @@ export default async function ({ logger.log(`\n${chalk.dim(category.label)}`); for (const healthcheckToRun of healthchecksToRun) { + // @todo replace this with `getLoader` from `tools` const spinner = ora({ prefixText: '', text: healthcheckToRun.label, diff --git a/packages/cli/src/tools/unzip.ts b/packages/cli-doctor/src/tools/unzip.ts similarity index 100% rename from packages/cli/src/tools/unzip.ts rename to packages/cli-doctor/src/tools/unzip.ts diff --git a/packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts b/packages/cli-doctor/src/tools/windows/__tests__/androidWinHelpers.test.ts similarity index 100% rename from packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts rename to packages/cli-doctor/src/tools/windows/__tests__/androidWinHelpers.test.ts diff --git a/packages/cli/src/tools/windows/androidWinHelpers.ts b/packages/cli-doctor/src/tools/windows/androidWinHelpers.ts similarity index 100% rename from packages/cli/src/tools/windows/androidWinHelpers.ts rename to packages/cli-doctor/src/tools/windows/androidWinHelpers.ts diff --git a/packages/cli/src/tools/windows/create-shortcut.ts b/packages/cli-doctor/src/tools/windows/create-shortcut.ts similarity index 100% rename from packages/cli/src/tools/windows/create-shortcut.ts rename to packages/cli-doctor/src/tools/windows/create-shortcut.ts diff --git a/packages/cli/src/tools/windows/environmentVariables.ts b/packages/cli-doctor/src/tools/windows/environmentVariables.ts similarity index 100% rename from packages/cli/src/tools/windows/environmentVariables.ts rename to packages/cli-doctor/src/tools/windows/environmentVariables.ts diff --git a/packages/cli/src/tools/windows/executeWinCommand.ts b/packages/cli-doctor/src/tools/windows/executeWinCommand.ts similarity index 100% rename from packages/cli/src/tools/windows/executeWinCommand.ts rename to packages/cli-doctor/src/tools/windows/executeWinCommand.ts diff --git a/packages/cli/src/tools/windows/processorType.ts b/packages/cli-doctor/src/tools/windows/processorType.ts similarity index 100% rename from packages/cli/src/tools/windows/processorType.ts rename to packages/cli-doctor/src/tools/windows/processorType.ts diff --git a/packages/cli-doctor/tsconfig.json b/packages/cli-doctor/tsconfig.json index c42dce26d..227855158 100644 --- a/packages/cli-doctor/tsconfig.json +++ b/packages/cli-doctor/tsconfig.json @@ -7,5 +7,6 @@ "references": [ {"path": "../tools"}, {"path": "../cli-types"}, + {"path": "../cli-config"} ] } diff --git a/packages/cli-types/package.json b/packages/cli-types/package.json index 60c95fdfb..a4de42b5e 100644 --- a/packages/cli-types/package.json +++ b/packages/cli-types/package.json @@ -5,9 +5,6 @@ "publishConfig": { "access": "public" }, - "dependencies": { - "ora": "^6.0.0" - }, "files": [ "build", "!*.map" diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index db58519b4..5c4754939 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -11,7 +11,6 @@ import { AndroidDependencyConfig, AndroidDependencyParams, } from './android'; -import type {Ora} from 'ora'; export type Prompt = any; diff --git a/packages/cli/package.json b/packages/cli/package.json index 9da36634e..e5ceb310d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -31,35 +31,24 @@ "@react-native-community/cli-server-api": "^6.4.0", "@react-native-community/cli-tools": "^6.2.0", "@react-native-community/cli-types": "^6.0.0", - "appdirsjs": "^1.2.4", + "@react-native-community/cli-config": "^6.0.1", "chalk": "^4.1.2", "commander": "^2.19.0", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", "execa": "^1.0.0", "find-up": "^4.1.0", "fs-extra": "^8.1.0", - "glob": "^7.1.3", "graceful-fs": "^4.1.3", - "joi": "^17.2.1", "leven": "^3.1.0", "lodash": "^4.17.15", "minimist": "^1.2.0", - "node-stream-zip": "^1.9.1", - "ora": "^6.0.0", - "pretty-format": "^26.6.2", "prompts": "^2.4.0", - "semver": "^6.3.0", - "serve-static": "^1.13.1", - "sudo-prompt": "^9.0.0" + "semver": "^6.3.0" }, "peerDependencies": { "react-native": "*" }, "devDependencies": { - "@types/cosmiconfig": "^5.0.3", "@types/fs-extra": "^8.1.0", - "@types/glob": "^7.1.1", "@types/graceful-fs": "^4.1.3", "@types/hapi__joi": "^17.1.6", "@types/lodash": "^4.14.149", diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index 855fdbf0f..c9f3f8303 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -6,7 +6,7 @@ import type {Ora} from 'ora'; import {validateProjectName} from './validate'; import DirectoryAlreadyExistsError from './errors/DirectoryAlreadyExistsError'; import printRunInstructions from './printRunInstructions'; -import {CLIError, logger} from '@react-native-community/cli-tools'; +import {CLIError, logger, getLoader} from '@react-native-community/cli-tools'; import { installTemplatePackage, getTemplateConfig, @@ -15,9 +15,8 @@ import { } from './template'; import {changePlaceholderInTemplate} from './editTemplate'; import * as PackageManager from '../../tools/packageManager'; -import installPods from '../../tools/installPods'; +import {installPods} from '@react-native-community/cli-doctor'; import banner from './banner'; -import {getLoader} from '../../tools/loader'; const DEFAULT_VERSION = 'latest'; diff --git a/packages/cli/src/commands/init/initCompat.ts b/packages/cli/src/commands/init/initCompat.ts index b93579820..22ed71d02 100644 --- a/packages/cli/src/commands/init/initCompat.ts +++ b/packages/cli/src/commands/init/initCompat.ts @@ -14,7 +14,7 @@ import printRunInstructions from './printRunInstructions'; import {createProjectFromTemplate} from '../../tools/generator/templates'; import * as PackageManager from '../../tools/packageManager'; import {logger} from '@react-native-community/cli-tools'; -import installPods from '../../tools/installPods'; +import {installPods} from '@react-native-community/cli-doctor'; /** * Creates the template for a React Native project given the provided diff --git a/packages/cli/src/commands/install/install.ts b/packages/cli/src/commands/install/install.ts index a630247f7..e65a8139f 100644 --- a/packages/cli/src/commands/install/install.ts +++ b/packages/cli/src/commands/install/install.ts @@ -8,7 +8,7 @@ import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import link from '../link/link'; -import loadConfig from '../../tools/config'; +import loadConfig from '@react-native-community/cli-config'; import {Config} from '@react-native-community/cli-types'; async function install(args: Array, ctx: Config): Promise { diff --git a/packages/cli/src/commands/link/__tests__/link.test.ts b/packages/cli/src/commands/link/__tests__/link.test.ts index 279285ca3..b80126cad 100644 --- a/packages/cli/src/commands/link/__tests__/link.test.ts +++ b/packages/cli/src/commands/link/__tests__/link.test.ts @@ -1,6 +1,7 @@ import {func as link} from '../link'; -import loadConfig from '../../../tools/config'; +import loadConfig from '@react-native-community/cli-config'; import makeHook from '../makeHook'; + jest.mock('chalk', () => ({ grey: jest.fn(), bold: jest.fn(), diff --git a/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts b/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts index 1599bdbc1..178441599 100644 --- a/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts +++ b/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts @@ -5,8 +5,7 @@ import snapshotDiff from 'snapshot-diff'; import stripAnsi from 'strip-ansi'; import upgrade from '../upgrade'; import {fetch, logger} from '@react-native-community/cli-tools'; -import loadConfig from '../../../tools/config'; -import merge from '../../../tools/merge'; +import loadConfig, {merge} from '@react-native-community/cli-config'; jest.mock('https'); jest.mock('fs'); diff --git a/packages/cli/src/commands/upgrade/upgrade.ts b/packages/cli/src/commands/upgrade/upgrade.ts index 66a1f510b..b60fc4d0f 100644 --- a/packages/cli/src/commands/upgrade/upgrade.ts +++ b/packages/cli/src/commands/upgrade/upgrade.ts @@ -6,7 +6,7 @@ import execa from 'execa'; import {Config} from '@react-native-community/cli-types'; import {logger, CLIError, fetch} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; -import installPods from '../../tools/installPods'; +import {installPods} from '@react-native-community/cli-doctor'; type UpgradeError = {message: string; stderr: string}; diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 33609ee5d..baa0467e3 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -9,7 +9,7 @@ import {logger, CLIError} from '@react-native-community/cli-tools'; import {detachedCommands, projectCommands} from './commands'; import init from './commands/init/initCompat'; -import loadConfig from './tools/config'; +import loadConfig from '@react-native-community/cli-config'; const pkgJson = require('../package.json'); diff --git a/packages/cli/src/tools/config/resolveNodeModuleDir.ts b/packages/cli/src/tools/config/resolveNodeModuleDir.ts deleted file mode 100644 index 68fd4fbfa..000000000 --- a/packages/cli/src/tools/config/resolveNodeModuleDir.ts +++ /dev/null @@ -1,2 +0,0 @@ -import {resolveNodeModuleDir} from '@react-native-community/cli-tools'; -export default resolveNodeModuleDir; diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 06731dba5..baccb12a9 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -11,6 +11,7 @@ {"path": "../cli-server-api"}, {"path": "../cli-hermes"}, {"path": "../cli-plugin-metro"}, - {"path": "../cli-doctor"} + {"path": "../cli-doctor"}, + {"path": "../cli-config"} ] } diff --git a/packages/platform-ios/src/commands/runIOS/index.ts b/packages/platform-ios/src/commands/runIOS/index.ts index 32fec787b..e0b5487f2 100644 --- a/packages/platform-ios/src/commands/runIOS/index.ts +++ b/packages/platform-ios/src/commands/runIOS/index.ts @@ -322,6 +322,7 @@ function buildProject( '-destination', `id=${udid}`, ]; + // @todo use `getLoader` from cli-tools package const loader = ora(); logger.info( `Building ${chalk.dim( diff --git a/packages/tools/package.json b/packages/tools/package.json index 2246d14c6..e7b97c151 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -13,6 +13,7 @@ "mime": "^2.4.1", "node-fetch": "^2.6.0", "open": "^6.2.0", + "ora": "^6.0.0", "semver": "^6.3.0", "shell-quote": "^1.7.3" }, diff --git a/packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts b/packages/tools/src/__tests__/findProjectRoot-test.ts similarity index 95% rename from packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts rename to packages/tools/src/__tests__/findProjectRoot-test.ts index a1c8ad4e2..cbb96c0c4 100644 --- a/packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts +++ b/packages/tools/src/__tests__/findProjectRoot-test.ts @@ -4,7 +4,7 @@ import { cleanup, writeFiles, getTempDirectory, -} from '../../../../../../jest/helpers'; +} from '../../../../jest/helpers'; beforeEach(async () => { await cleanup(DIR); diff --git a/packages/cli/src/tools/config/findProjectRoot.ts b/packages/tools/src/findProjectRoot.ts similarity index 92% rename from packages/cli/src/tools/config/findProjectRoot.ts rename to packages/tools/src/findProjectRoot.ts index 419bebca9..e90ffa132 100644 --- a/packages/cli/src/tools/config/findProjectRoot.ts +++ b/packages/tools/src/findProjectRoot.ts @@ -1,6 +1,6 @@ import findUp from 'find-up'; import path from 'path'; -import {CLIError} from '@react-native-community/cli-tools'; +import {CLIError} from './errors'; /** * Finds project root by looking for a closest `package.json`. diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts index 545aab8c6..3914f94c2 100644 --- a/packages/tools/src/index.ts +++ b/packages/tools/src/index.ts @@ -9,5 +9,7 @@ export {default as launchEditor} from './launchEditor'; export {default as releaseChecker} from './releaseChecker'; export {default as resolveNodeModuleDir} from './resolveNodeModuleDir'; export {default as hookStdout} from './hookStdout'; +export {getLoader, NoopLoader, Loader} from './loader'; +export {default as findProjectRoot} from './findProjectRoot'; export * from './errors'; diff --git a/packages/cli/src/tools/loader.ts b/packages/tools/src/loader.ts similarity index 94% rename from packages/cli/src/tools/loader.ts rename to packages/tools/src/loader.ts index 104da63f6..a1370b5b8 100644 --- a/packages/cli/src/tools/loader.ts +++ b/packages/tools/src/loader.ts @@ -1,6 +1,8 @@ import ora from 'ora'; import type {Ora, Spinner, Color} from 'ora'; -import {logger} from '@react-native-community/cli-tools'; +import logger from './logger'; + +export type Loader = Ora; class OraNoop implements Ora { spinner: Spinner = {interval: 1, frames: []}; From 657222292e79d9077476b6d492845cb2dacd045b Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 25 Jan 2022 15:54:15 +0100 Subject: [PATCH 07/17] fix import --- packages/cli-doctor/src/commands/doctor.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/cli-doctor/src/commands/doctor.ts b/packages/cli-doctor/src/commands/doctor.ts index a5f52cfca..17ac214bd 100644 --- a/packages/cli-doctor/src/commands/doctor.ts +++ b/packages/cli-doctor/src/commands/doctor.ts @@ -1,7 +1,6 @@ import chalk from 'chalk'; -import {logger} from '@react-native-community/cli-tools'; +import {logger, getLoader} from '@react-native-community/cli-tools'; import {getHealthchecks, HEALTHCHECK_TYPES} from '../tools/healthchecks'; -import {getLoader} from '@react-native-community/cli-tools/src/loader'; import printFixOptions, {KEYS} from '../tools/printFixOptions'; import runAutomaticFix, {AUTOMATIC_FIX_LEVELS} from '../tools/runAutomaticFix'; import { From 8086cc4bfdd999182ebce22a260164026b8ca1f9 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 25 Jan 2022 15:55:46 +0100 Subject: [PATCH 08/17] fix: add note about todo --- packages/cli-doctor/src/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/cli-doctor/src/index.ts b/packages/cli-doctor/src/index.ts index 82cb2f602..6cb85db98 100644 --- a/packages/cli-doctor/src/index.ts +++ b/packages/cli-doctor/src/index.ts @@ -3,4 +3,9 @@ import info from './commands/info'; export const commands = {info, doctor}; +/** + * @todo + * We should not rely on this file from other packages, e.g. CLI. We probably need to + * refactor the init in order to remove that connection. + */ export {default as installPods} from './tools/installPods'; \ No newline at end of file From 6f93afa4406dbf90f75b1f2e2f54937e0d15c427 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 25 Jan 2022 16:11:57 +0100 Subject: [PATCH 09/17] additiinoal fies --- packages/cli-config/src/index.ts | 3 +-- packages/cli-doctor/src/tools/brewInstall.ts | 2 +- packages/cli-doctor/src/tools/downloadAndUnzip.ts | 3 ++- packages/cli-doctor/src/tools/healthchecks/common.ts | 3 ++- packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts | 3 +-- packages/cli-doctor/src/tools/install.ts | 2 +- packages/cli-doctor/src/tools/installPods.ts | 2 +- packages/cli-doctor/src/tools/runAutomaticFix.ts | 4 ++-- packages/cli-types/package.json | 3 +++ packages/cli-types/src/index.ts | 6 +++++- packages/cli/src/commands/init/init.ts | 4 ++-- packages/tools/package.json | 1 + packages/tools/src/index.ts | 2 +- packages/tools/src/loader.ts | 8 ++++---- packages/tools/tsconfig.json | 3 ++- 15 files changed, 29 insertions(+), 20 deletions(-) diff --git a/packages/cli-config/src/index.ts b/packages/cli-config/src/index.ts index 47737b145..c1765660d 100644 --- a/packages/cli-config/src/index.ts +++ b/packages/cli-config/src/index.ts @@ -7,7 +7,7 @@ import { UserConfig, Config, } from '@react-native-community/cli-types'; -import {logger, inlineString, findProjectRoot} from '@react-native-community/cli-tools'; +import {logger, inlineString, findProjectRoot, resolveNodeModuleDir} from '@react-native-community/cli-tools'; import findDependencies from './findDependencies'; import resolveReactNativePath from './resolveReactNativePath'; import findAssets from './findAssets'; @@ -17,7 +17,6 @@ import { } from './readConfigFromDisk'; import assign from './assign'; import merge from './merge'; -import resolveNodeModuleDir from './resolveNodeModuleDir'; function getDependencyConfig( root: string, diff --git a/packages/cli-doctor/src/tools/brewInstall.ts b/packages/cli-doctor/src/tools/brewInstall.ts index a5c56c3c8..6f2fbab67 100644 --- a/packages/cli-doctor/src/tools/brewInstall.ts +++ b/packages/cli-doctor/src/tools/brewInstall.ts @@ -1,5 +1,5 @@ import execa from 'execa'; -import type {Loader} from '@react-native-community/cli-tools'; +import {Loader} from '@react-native-community/cli-types'; import {logError} from './healthchecks/common'; type InstallArgs = { diff --git a/packages/cli-doctor/src/tools/downloadAndUnzip.ts b/packages/cli-doctor/src/tools/downloadAndUnzip.ts index 6da7aac58..e175eac74 100644 --- a/packages/cli-doctor/src/tools/downloadAndUnzip.ts +++ b/packages/cli-doctor/src/tools/downloadAndUnzip.ts @@ -1,4 +1,5 @@ -import {fetchToTemp, Loader} from '@react-native-community/cli-tools'; +import {fetchToTemp} from '@react-native-community/cli-tools'; +import {Loader} from '@react-native-community/cli-types'; import {unzip} from './unzip'; import {deleteFile} from './deleteFile'; diff --git a/packages/cli-doctor/src/tools/healthchecks/common.ts b/packages/cli-doctor/src/tools/healthchecks/common.ts index e9b500e6a..e9bfe75bb 100644 --- a/packages/cli-doctor/src/tools/healthchecks/common.ts +++ b/packages/cli-doctor/src/tools/healthchecks/common.ts @@ -2,7 +2,8 @@ import chalk from 'chalk'; import readline from 'readline'; import wcwidth from 'wcwidth'; import stripAnsi from 'strip-ansi'; -import {logger, Loader} from '@react-native-community/cli-tools'; +import {Loader} from '@react-native-community/cli-types'; +import {logger} from '@react-native-community/cli-tools'; // Space is necessary to keep correct ordering on screen const logMessage = (message?: string) => { diff --git a/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts index edc3b5801..9498b4520 100644 --- a/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts +++ b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts @@ -4,8 +4,7 @@ import prompts from 'prompts'; import {isSoftwareNotInstalled, PACKAGE_MANAGERS} from '../checkInstallation'; import {packageManager} from './packageManagers'; import {logError, removeMessage} from './common'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; -import type {Loader} from '@react-native-community/cli-tools'; +import {HealthCheckInterface, Loader} from '@react-native-community/cli-types'; const label = 'ios-deploy'; diff --git a/packages/cli-doctor/src/tools/install.ts b/packages/cli-doctor/src/tools/install.ts index 647f0ea90..5fc00d89c 100644 --- a/packages/cli-doctor/src/tools/install.ts +++ b/packages/cli-doctor/src/tools/install.ts @@ -1,4 +1,4 @@ -import type {Loader} from '@react-native-community/cli-tools'; +import {Loader} from '@react-native-community/cli-types'; import {brewInstall} from './brewInstall'; import {logManualInstallation} from './healthchecks/common'; diff --git a/packages/cli-doctor/src/tools/installPods.ts b/packages/cli-doctor/src/tools/installPods.ts index d3373ddf0..5166b64a6 100644 --- a/packages/cli-doctor/src/tools/installPods.ts +++ b/packages/cli-doctor/src/tools/installPods.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import execa from 'execa'; import chalk from 'chalk'; -import type {Loader} from '@react-native-community/cli-tools'; +import {Loader} from '@react-native-community/cli-types'; import prompts from 'prompts'; import {logger, NoopLoader} from '@react-native-community/cli-tools'; // @ts-ignore untyped diff --git a/packages/cli-doctor/src/tools/runAutomaticFix.ts b/packages/cli-doctor/src/tools/runAutomaticFix.ts index d32af6691..d96b25011 100644 --- a/packages/cli-doctor/src/tools/runAutomaticFix.ts +++ b/packages/cli-doctor/src/tools/runAutomaticFix.ts @@ -1,7 +1,7 @@ import chalk from 'chalk'; import ora from 'ora'; -import {logger, Loader} from '@react-native-community/cli-tools'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; +import {logger} from '@react-native-community/cli-tools'; +import {EnvironmentInfo, Loader} from '@react-native-community/cli-types'; import {HEALTHCHECK_TYPES} from './healthchecks'; import {HealthCheckCategoryResult} from './types'; import {logManualInstallation} from './healthchecks/common'; diff --git a/packages/cli-types/package.json b/packages/cli-types/package.json index a4de42b5e..60c95fdfb 100644 --- a/packages/cli-types/package.json +++ b/packages/cli-types/package.json @@ -5,6 +5,9 @@ "publishConfig": { "access": "public" }, + "dependencies": { + "ora": "^6.0.0" + }, "files": [ "build", "!*.map" diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index 5c4754939..efc9bd0d4 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -12,8 +12,12 @@ import { AndroidDependencyParams, } from './android'; +import type {Ora} from 'ora'; + export type Prompt = any; +export type Loader = Ora; + export type CommandFunction = ( argv: Array, ctx: Config, @@ -179,7 +183,7 @@ export type Healthchecks = { }; export type RunAutomaticFix = (args: { - loader: Ora; + loader: Loader; logManualInstallation: ({ healthcheck, url, diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index c9f3f8303..56e285251 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -2,10 +2,10 @@ import os from 'os'; import path from 'path'; import fs from 'fs-extra'; import minimist from 'minimist'; -import type {Ora} from 'ora'; import {validateProjectName} from './validate'; import DirectoryAlreadyExistsError from './errors/DirectoryAlreadyExistsError'; import printRunInstructions from './printRunInstructions'; +import {Loader} from '@react-native-community/cli-types'; import {CLIError, logger, getLoader} from '@react-native-community/cli-tools'; import { installTemplatePackage, @@ -155,7 +155,7 @@ async function installDependencies({ }: { directory: string; npm?: boolean; - loader: Ora; + loader: Loader; root: string; }) { loader.start('Installing dependencies'); diff --git a/packages/tools/package.json b/packages/tools/package.json index e7b97c151..a46686b3e 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -18,6 +18,7 @@ "shell-quote": "^1.7.3" }, "devDependencies": { + "@react-native-community/cli-types": "^6.0.0", "@types/lodash": "^4.14.149", "@types/mime": "^2.0.1", "@types/node-fetch": "^2.5.5" diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts index 3914f94c2..b7ad97798 100644 --- a/packages/tools/src/index.ts +++ b/packages/tools/src/index.ts @@ -9,7 +9,7 @@ export {default as launchEditor} from './launchEditor'; export {default as releaseChecker} from './releaseChecker'; export {default as resolveNodeModuleDir} from './resolveNodeModuleDir'; export {default as hookStdout} from './hookStdout'; -export {getLoader, NoopLoader, Loader} from './loader'; +export {getLoader, NoopLoader} from './loader'; export {default as findProjectRoot} from './findProjectRoot'; export * from './errors'; diff --git a/packages/tools/src/loader.ts b/packages/tools/src/loader.ts index a1370b5b8..50ff10352 100644 --- a/packages/tools/src/loader.ts +++ b/packages/tools/src/loader.ts @@ -1,8 +1,7 @@ import ora from 'ora'; import type {Ora, Spinner, Color} from 'ora'; import logger from './logger'; - -export type Loader = Ora; +import type {Loader} from '@react-native-community/cli-types'; class OraNoop implements Ora { spinner: Spinner = {interval: 1, frames: []}; @@ -40,13 +39,14 @@ class OraNoop implements Ora { return this; } frame() { + return this.text; } } -export function getLoader() { +export function getLoader(): Loader { // FIXME refactor getLoader to not rely on class instantiation to avoid type conflict or implement an default Ora Loader Class definition - return logger.isVerbose() ? OraNoop : (ora as any); + return logger.isVerbose() ? OraNoop : (ora as Loader); } export const NoopLoader = OraNoop; diff --git a/packages/tools/tsconfig.json b/packages/tools/tsconfig.json index 7bb06bce6..6fb5d1351 100644 --- a/packages/tools/tsconfig.json +++ b/packages/tools/tsconfig.json @@ -3,5 +3,6 @@ "compilerOptions": { "rootDir": "src", "outDir": "build" - } + }, + "references": [{"path": "../cli-types"}] } From 9ce9ffde5cee541b1dda82efbf477646e73dea65 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 10:53:58 +0100 Subject: [PATCH 10/17] feat: fix up types and Ora --- packages/cli-doctor/src/commands/doctor.ts | 13 +- packages/cli-doctor/src/tools/brewInstall.ts | 2 +- .../cli-doctor/src/tools/downloadAndUnzip.ts | 2 +- packages/cli-doctor/src/tools/envinfo.ts | 2 +- .../__tests__/androidHomeEnvVariable.test.ts | 4 +- .../healthchecks/__tests__/androidNDK.test.ts | 4 +- .../healthchecks/__tests__/androidSDK.test.ts | 4 +- .../__tests__/androidStudio.test.ts | 4 +- .../tools/healthchecks/__tests__/jdk.test.ts | 4 +- .../healthchecks/androidHomeEnvVariable.ts | 2 +- .../src/tools/healthchecks/androidNDK.ts | 5 +- .../src/tools/healthchecks/androidSDK.ts | 5 +- .../src/tools/healthchecks/androidStudio.ts | 2 +- .../src/tools/healthchecks/cocoaPods.ts | 7 +- .../src/tools/healthchecks/common.ts | 2 +- .../src/tools/healthchecks/index.ts | 5 +- .../src/tools/healthchecks/iosDeploy.ts | 2 +- .../cli-doctor/src/tools/healthchecks/jdk.ts | 2 +- .../src/tools/healthchecks/nodeJS.ts | 2 +- .../src/tools/healthchecks/packageManagers.ts | 2 +- .../src/tools/healthchecks/watchman.ts | 2 +- .../src/tools/healthchecks/xcode.ts | 2 +- packages/cli-doctor/src/tools/install.ts | 2 +- packages/cli-doctor/src/tools/installPods.ts | 2 +- .../cli-doctor/src/tools/runAutomaticFix.ts | 3 +- packages/cli-doctor/src/tools/types.ts | 18 --- packages/cli-doctor/src/types.ts | 114 ++++++++++++++++++ packages/cli-types/package.json | 3 - packages/cli-types/src/index.ts | 101 +--------------- packages/cli/src/commands/init/init.ts | 6 +- packages/tools/src/index.ts | 2 +- packages/tools/src/loader.ts | 14 +-- 32 files changed, 162 insertions(+), 182 deletions(-) delete mode 100644 packages/cli-doctor/src/tools/types.ts create mode 100644 packages/cli-doctor/src/types.ts diff --git a/packages/cli-doctor/src/commands/doctor.ts b/packages/cli-doctor/src/commands/doctor.ts index 17ac214bd..5dd0c2d6a 100644 --- a/packages/cli-doctor/src/commands/doctor.ts +++ b/packages/cli-doctor/src/commands/doctor.ts @@ -3,12 +3,13 @@ import {logger, getLoader} from '@react-native-community/cli-tools'; import {getHealthchecks, HEALTHCHECK_TYPES} from '../tools/healthchecks'; import printFixOptions, {KEYS} from '../tools/printFixOptions'; import runAutomaticFix, {AUTOMATIC_FIX_LEVELS} from '../tools/runAutomaticFix'; +import {DetachedCommandFunction} from '@react-native-community/cli-types'; import { - DetachedCommandFunction, - HealthCheckCategory, + HealthCheckCategoryResult, HealthCheckInterface, -} from '@react-native-community/cli-types'; -import {HealthCheckCategoryResult, HealthCheckResult} from '../tools/types'; + HealthCheckCategory, + HealthCheckResult, +} from '../types'; import getEnvironmentInfo from '../tools/envinfo'; import {logMessage} from '../tools/healthchecks/common'; @@ -109,8 +110,7 @@ const getAutomaticFixForPlatform = ( }; const doctorCommand = (async (_, options) => { - const Loader = getLoader(); - const loader = new Loader(); + const loader = getLoader(); loader.start('Running diagnostics...'); @@ -282,4 +282,3 @@ export default { }, ], }; - \ No newline at end of file diff --git a/packages/cli-doctor/src/tools/brewInstall.ts b/packages/cli-doctor/src/tools/brewInstall.ts index 6f2fbab67..7cc471d33 100644 --- a/packages/cli-doctor/src/tools/brewInstall.ts +++ b/packages/cli-doctor/src/tools/brewInstall.ts @@ -1,5 +1,5 @@ import execa from 'execa'; -import {Loader} from '@react-native-community/cli-types'; +import {Loader} from '../types'; import {logError} from './healthchecks/common'; type InstallArgs = { diff --git a/packages/cli-doctor/src/tools/downloadAndUnzip.ts b/packages/cli-doctor/src/tools/downloadAndUnzip.ts index e175eac74..bd4ae20f3 100644 --- a/packages/cli-doctor/src/tools/downloadAndUnzip.ts +++ b/packages/cli-doctor/src/tools/downloadAndUnzip.ts @@ -1,5 +1,5 @@ import {fetchToTemp} from '@react-native-community/cli-tools'; -import {Loader} from '@react-native-community/cli-types'; +import {Loader} from '../types'; import {unzip} from './unzip'; import {deleteFile} from './deleteFile'; diff --git a/packages/cli-doctor/src/tools/envinfo.ts b/packages/cli-doctor/src/tools/envinfo.ts index 1d7428dc5..b26a2710a 100644 --- a/packages/cli-doctor/src/tools/envinfo.ts +++ b/packages/cli-doctor/src/tools/envinfo.ts @@ -1,7 +1,7 @@ // @ts-ignore import envinfo from 'envinfo'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; import {platform} from 'os'; +import {EnvironmentInfo} from '../types'; /** * Returns information about the running system. diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts index 0c13d7b84..9f0dc22b1 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidHomeEnvVariable.test.ts @@ -1,6 +1,6 @@ import androidHomeEnvVariables from '../androidHomeEnvVariable'; -import {NoopLoader} from '../../../tools/loader'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; +import {NoopLoader} from '@react-native-community/cli-tools'; +import {EnvironmentInfo} from '../../../types'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts index a61120971..2ea0fc8be 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts @@ -1,7 +1,7 @@ import androidNDK from '../androidNDK'; import getEnvironmentInfo from '../../envinfo'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../loader'; +import {EnvironmentInfo} from '../../../types'; +import {NoopLoader} from '@react-native-community/cli-tools'; import * as common from '../common'; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts index afd4308f9..19d3b1b8e 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts @@ -5,8 +5,8 @@ import {cleanup, writeFiles} from '../../../../../../jest/helpers'; import androidSDK from '../androidSDK'; import getEnvironmentInfo from '../../envinfo'; import * as downloadAndUnzip from '../../downloadAndUnzip'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../tools/loader'; +import {EnvironmentInfo} from '../../../types'; +import {NoopLoader} from '@react-native-community/cli-tools'; import * as common from '../common'; import * as androidWinHelpers from '../../windows/androidWinHelpers'; import * as environmentVariables from '../../windows/environmentVariables'; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts index 1bed37f4b..96796318b 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidStudio.test.ts @@ -1,8 +1,8 @@ import execa from 'execa'; import androidStudio from '../androidStudio'; import getEnvironmentInfo from '../../envinfo'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../tools/loader'; +import {EnvironmentInfo} from '../../../types'; +import {NoopLoader} from '@react-native-community/cli-tools'; import * as common from '../common'; import * as downloadAndUnzip from '../../downloadAndUnzip'; diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts index f31244e2b..db1c8bebe 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts @@ -1,8 +1,8 @@ import execa from 'execa'; import jdk from '../jdk'; import getEnvironmentInfo from '../../envinfo'; -import {EnvironmentInfo} from '@react-native-community/cli-types'; -import {NoopLoader} from '../../../tools/loader'; +import {EnvironmentInfo} from '../../../types'; +import {NoopLoader} from '@react-native-community/cli-tools'; import * as common from '../common'; import * as unzip from '../../unzip'; import * as deleteFile from '../../deleteFile'; diff --git a/packages/cli-doctor/src/tools/healthchecks/androidHomeEnvVariable.ts b/packages/cli-doctor/src/tools/healthchecks/androidHomeEnvVariable.ts index 8ea5d5cb5..198409d3a 100644 --- a/packages/cli-doctor/src/tools/healthchecks/androidHomeEnvVariable.ts +++ b/packages/cli-doctor/src/tools/healthchecks/androidHomeEnvVariable.ts @@ -1,5 +1,5 @@ import chalk from 'chalk'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; // List of answers on how to set `ANDROID_HOME` for each platform const URLS = { diff --git a/packages/cli-doctor/src/tools/healthchecks/androidNDK.ts b/packages/cli-doctor/src/tools/healthchecks/androidNDK.ts index ce236f268..b3809bc4a 100644 --- a/packages/cli-doctor/src/tools/healthchecks/androidNDK.ts +++ b/packages/cli-doctor/src/tools/healthchecks/androidNDK.ts @@ -1,10 +1,7 @@ import chalk from 'chalk'; import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import { - EnvironmentInfo, - HealthCheckInterface, -} from '@react-native-community/cli-types'; +import {EnvironmentInfo, HealthCheckInterface} from '../../types'; export default { label: 'Android NDK', diff --git a/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts b/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts index d8ddaad35..4d15a2996 100644 --- a/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts +++ b/packages/cli-doctor/src/tools/healthchecks/androidSDK.ts @@ -2,10 +2,7 @@ import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; import {logger, findProjectRoot} from '@react-native-community/cli-tools'; -import { - HealthCheckInterface, - EnvironmentInfo, -} from '@react-native-community/cli-types'; +import {HealthCheckInterface, EnvironmentInfo} from '../../types'; import { getAndroidSdkRootInstallation, installComponent, diff --git a/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts b/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts index a2e5a9809..9c194b4fa 100644 --- a/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts +++ b/packages/cli-doctor/src/tools/healthchecks/androidStudio.ts @@ -1,6 +1,6 @@ import {join} from 'path'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; import {downloadAndUnzip} from '../downloadAndUnzip'; import {executeCommand} from '../windows/executeWinCommand'; diff --git a/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts b/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts index 323ce8037..850203459 100644 --- a/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts +++ b/packages/cli-doctor/src/tools/healthchecks/cocoaPods.ts @@ -1,12 +1,9 @@ import execa from 'execa'; import {isSoftwareNotInstalled} from '../checkInstallation'; -import { - promptCocoaPodsInstallationQuestion, - runSudo, -} from '../installPods'; +import {promptCocoaPodsInstallationQuestion, runSudo} from '../installPods'; import {removeMessage, logError} from './common'; import {brewInstall} from '../brewInstall'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; const label = 'CocoaPods'; diff --git a/packages/cli-doctor/src/tools/healthchecks/common.ts b/packages/cli-doctor/src/tools/healthchecks/common.ts index e9bfe75bb..af71f5044 100644 --- a/packages/cli-doctor/src/tools/healthchecks/common.ts +++ b/packages/cli-doctor/src/tools/healthchecks/common.ts @@ -2,8 +2,8 @@ import chalk from 'chalk'; import readline from 'readline'; import wcwidth from 'wcwidth'; import stripAnsi from 'strip-ansi'; -import {Loader} from '@react-native-community/cli-types'; import {logger} from '@react-native-community/cli-tools'; +import {Loader} from '../../types'; // Space is necessary to keep correct ordering on screen const logMessage = (message?: string) => { diff --git a/packages/cli-doctor/src/tools/healthchecks/index.ts b/packages/cli-doctor/src/tools/healthchecks/index.ts index c1114e978..e7c870b62 100644 --- a/packages/cli-doctor/src/tools/healthchecks/index.ts +++ b/packages/cli-doctor/src/tools/healthchecks/index.ts @@ -9,10 +9,7 @@ import androidNDK from './androidNDK'; import xcode from './xcode'; import cocoaPods from './cocoaPods'; import iosDeploy from './iosDeploy'; -import { - Healthchecks, - HealthCheckCategory, -} from '@react-native-community/cli-types'; +import {Healthchecks, HealthCheckCategory} from '../../types'; import loadConfig from '@react-native-community/cli-config'; export const HEALTHCHECK_TYPES = { diff --git a/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts index 9498b4520..8c095b46b 100644 --- a/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts +++ b/packages/cli-doctor/src/tools/healthchecks/iosDeploy.ts @@ -4,7 +4,7 @@ import prompts from 'prompts'; import {isSoftwareNotInstalled, PACKAGE_MANAGERS} from '../checkInstallation'; import {packageManager} from './packageManagers'; import {logError, removeMessage} from './common'; -import {HealthCheckInterface, Loader} from '@react-native-community/cli-types'; +import {HealthCheckInterface, Loader} from '../../types'; const label = 'ios-deploy'; diff --git a/packages/cli-doctor/src/tools/healthchecks/jdk.ts b/packages/cli-doctor/src/tools/healthchecks/jdk.ts index 36182cd17..30d751d7a 100644 --- a/packages/cli-doctor/src/tools/healthchecks/jdk.ts +++ b/packages/cli-doctor/src/tools/healthchecks/jdk.ts @@ -1,7 +1,7 @@ import {join} from 'path'; import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; import {downloadAndUnzip} from '../downloadAndUnzip'; import { setEnvironment, diff --git a/packages/cli-doctor/src/tools/healthchecks/nodeJS.ts b/packages/cli-doctor/src/tools/healthchecks/nodeJS.ts index 6b36cbbff..63cf5a41b 100644 --- a/packages/cli-doctor/src/tools/healthchecks/nodeJS.ts +++ b/packages/cli-doctor/src/tools/healthchecks/nodeJS.ts @@ -1,6 +1,6 @@ import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; export default { label: 'Node.js', diff --git a/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts b/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts index 874a3f214..862036541 100644 --- a/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts +++ b/packages/cli-doctor/src/tools/healthchecks/packageManagers.ts @@ -5,7 +5,7 @@ import { doesSoftwareNeedToBeFixed, } from '../checkInstallation'; import {install} from '../install'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; const packageManager = (() => { if (fs.existsSync('yarn.lock')) { diff --git a/packages/cli-doctor/src/tools/healthchecks/watchman.ts b/packages/cli-doctor/src/tools/healthchecks/watchman.ts index 28b399cd5..1a5476d1c 100644 --- a/packages/cli-doctor/src/tools/healthchecks/watchman.ts +++ b/packages/cli-doctor/src/tools/healthchecks/watchman.ts @@ -1,7 +1,7 @@ import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; import {install} from '../install'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; const label = 'Watchman'; diff --git a/packages/cli-doctor/src/tools/healthchecks/xcode.ts b/packages/cli-doctor/src/tools/healthchecks/xcode.ts index 9d2f8c125..1fb9ac014 100644 --- a/packages/cli-doctor/src/tools/healthchecks/xcode.ts +++ b/packages/cli-doctor/src/tools/healthchecks/xcode.ts @@ -1,6 +1,6 @@ import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import {HealthCheckInterface} from '@react-native-community/cli-types'; +import {HealthCheckInterface} from '../../types'; export default { label: 'Xcode', diff --git a/packages/cli-doctor/src/tools/install.ts b/packages/cli-doctor/src/tools/install.ts index 5fc00d89c..4845a827a 100644 --- a/packages/cli-doctor/src/tools/install.ts +++ b/packages/cli-doctor/src/tools/install.ts @@ -1,4 +1,4 @@ -import {Loader} from '@react-native-community/cli-types'; +import {Loader} from '../types'; import {brewInstall} from './brewInstall'; import {logManualInstallation} from './healthchecks/common'; diff --git a/packages/cli-doctor/src/tools/installPods.ts b/packages/cli-doctor/src/tools/installPods.ts index 5166b64a6..f8846c2c2 100644 --- a/packages/cli-doctor/src/tools/installPods.ts +++ b/packages/cli-doctor/src/tools/installPods.ts @@ -1,12 +1,12 @@ import fs from 'fs'; import execa from 'execa'; import chalk from 'chalk'; -import {Loader} from '@react-native-community/cli-types'; import prompts from 'prompts'; import {logger, NoopLoader} from '@react-native-community/cli-tools'; // @ts-ignore untyped import sudo from 'sudo-prompt'; import {brewInstall} from './brewInstall'; +import {Loader} from '../types'; type PromptCocoaPodsInstallation = { installMethod: 'gem' | 'homebrew'; diff --git a/packages/cli-doctor/src/tools/runAutomaticFix.ts b/packages/cli-doctor/src/tools/runAutomaticFix.ts index d96b25011..2bc109efd 100644 --- a/packages/cli-doctor/src/tools/runAutomaticFix.ts +++ b/packages/cli-doctor/src/tools/runAutomaticFix.ts @@ -1,9 +1,8 @@ import chalk from 'chalk'; import ora from 'ora'; import {logger} from '@react-native-community/cli-tools'; -import {EnvironmentInfo, Loader} from '@react-native-community/cli-types'; +import {EnvironmentInfo, HealthCheckCategoryResult, Loader} from '../types'; import {HEALTHCHECK_TYPES} from './healthchecks'; -import {HealthCheckCategoryResult} from './types'; import {logManualInstallation} from './healthchecks/common'; export enum AUTOMATIC_FIX_LEVELS { diff --git a/packages/cli-doctor/src/tools/types.ts b/packages/cli-doctor/src/tools/types.ts deleted file mode 100644 index ca4d7cefa..000000000 --- a/packages/cli-doctor/src/tools/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {RunAutomaticFix, NotFound} from '@react-native-community/cli-types'; - -export type HealthCheckResult = { - label: string; - needsToBeFixed: boolean; - version?: NotFound | string; - versions?: [string] | string; - versionRange?: string; - description: string | undefined; - runAutomaticFix: RunAutomaticFix; - isRequired: boolean; - type?: string; -}; - -export type HealthCheckCategoryResult = { - label: string; - healthchecks: HealthCheckResult[]; -}; diff --git a/packages/cli-doctor/src/types.ts b/packages/cli-doctor/src/types.ts new file mode 100644 index 000000000..bf1d14893 --- /dev/null +++ b/packages/cli-doctor/src/types.ts @@ -0,0 +1,114 @@ +import type {Ora} from 'ora'; + +export type Loader = Ora; + +export type NotFound = 'Not Found'; + +type AvailableInformation = { + version: string; + path: string; +}; + +type Information = AvailableInformation | NotFound; + +export type EnvironmentInfo = { + System: { + OS: string; + CPU: string; + Memory: string; + Shell: AvailableInformation; + }; + Binaries: { + Node: AvailableInformation; + Yarn: AvailableInformation; + npm: AvailableInformation; + Watchman: AvailableInformation; + }; + SDKs: { + 'iOS SDK': { + Platforms: string[]; + }; + 'Android SDK': + | { + 'API Levels': string[] | NotFound; + 'Build Tools': string[] | NotFound; + 'System Images': string[] | NotFound; + 'Android NDK': string | NotFound; + } + | NotFound; + }; + IDEs: { + 'Android Studio': AvailableInformation | NotFound; + Emacs: AvailableInformation; + Nano: AvailableInformation; + VSCode: AvailableInformation; + Vim: AvailableInformation; + Xcode: AvailableInformation; + }; + Languages: { + Java: Information; + }; +}; + +export type HealthCheckCategory = { + label: string; + healthchecks: HealthCheckInterface[]; +}; + +export type Healthchecks = { + common: HealthCheckCategory; + android: HealthCheckCategory; + ios?: HealthCheckCategory; +}; + +export type RunAutomaticFix = (args: { + loader: Loader; + logManualInstallation: ({ + healthcheck, + url, + command, + message, + }: { + healthcheck?: string; + url?: string; + command?: string; + message?: string; + }) => void; + environmentInfo: EnvironmentInfo; +}) => Promise | void; + +export type HealthCheckInterface = { + label: string; + visible?: boolean | void; + isRequired?: boolean; + description?: string; + getDiagnostics: ( + environmentInfo: EnvironmentInfo, + ) => Promise<{ + version?: string; + versions?: [string]; + versionRange?: string; + needsToBeFixed: boolean | string; + }>; + win32AutomaticFix?: RunAutomaticFix; + darwinAutomaticFix?: RunAutomaticFix; + linuxAutomaticFix?: RunAutomaticFix; + runAutomaticFix: RunAutomaticFix; +}; + +export type HealthCheckResult = { + label: string; + needsToBeFixed: boolean; + version?: NotFound | string; + versions?: [string] | string; + versionRange?: string; + description: string | undefined; + runAutomaticFix: RunAutomaticFix; + isRequired: boolean; + type?: string; +}; + +export type HealthCheckCategoryResult = { + label: string; + healthchecks: HealthCheckResult[]; +}; diff --git a/packages/cli-types/package.json b/packages/cli-types/package.json index 60c95fdfb..a4de42b5e 100644 --- a/packages/cli-types/package.json +++ b/packages/cli-types/package.json @@ -5,9 +5,6 @@ "publishConfig": { "access": "public" }, - "dependencies": { - "ora": "^6.0.0" - }, "files": [ "build", "!*.map" diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index efc9bd0d4..757cc95d8 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -12,12 +12,8 @@ import { AndroidDependencyParams, } from './android'; -import type {Ora} from 'ora'; - export type Prompt = any; -export type Loader = Ora; - export type CommandFunction = ( argv: Array, ctx: Config, @@ -124,99 +120,6 @@ export type ProjectConfig = { [key: string]: any; }; -export type NotFound = 'Not Found'; -type AvailableInformation = { - version: string; - path: string; -}; - -type Information = AvailableInformation | NotFound; - -export type EnvironmentInfo = { - System: { - OS: string; - CPU: string; - Memory: string; - Shell: AvailableInformation; - }; - Binaries: { - Node: AvailableInformation; - Yarn: AvailableInformation; - npm: AvailableInformation; - Watchman: AvailableInformation; - }; - SDKs: { - 'iOS SDK': { - Platforms: string[]; - }; - 'Android SDK': - | { - 'API Levels': string[] | NotFound; - 'Build Tools': string[] | NotFound; - 'System Images': string[] | NotFound; - 'Android NDK': string | NotFound; - } - | NotFound; - }; - IDEs: { - 'Android Studio': AvailableInformation | NotFound; - Emacs: AvailableInformation; - Nano: AvailableInformation; - VSCode: AvailableInformation; - Vim: AvailableInformation; - Xcode: AvailableInformation; - }; - Languages: { - Java: Information; - }; -}; - -export type HealthCheckCategory = { - label: string; - healthchecks: HealthCheckInterface[]; -}; - -export type Healthchecks = { - common: HealthCheckCategory; - android: HealthCheckCategory; - ios?: HealthCheckCategory; -}; - -export type RunAutomaticFix = (args: { - loader: Loader; - logManualInstallation: ({ - healthcheck, - url, - command, - message, - }: { - healthcheck?: string; - url?: string; - command?: string; - message?: string; - }) => void; - environmentInfo: EnvironmentInfo; -}) => Promise | void; - -export type HealthCheckInterface = { - label: string; - visible?: boolean | void; - isRequired?: boolean; - description?: string; - getDiagnostics: ( - environmentInfo: EnvironmentInfo, - ) => Promise<{ - version?: string; - versions?: [string]; - versionRange?: string; - needsToBeFixed: boolean | string; - }>; - win32AutomaticFix?: RunAutomaticFix; - darwinAutomaticFix?: RunAutomaticFix; - linuxAutomaticFix?: RunAutomaticFix; - runAutomaticFix: RunAutomaticFix; -}; - /** * @property root - Root where the configuration has been resolved from * @property reactNativePath - Path to React Native source @@ -249,7 +152,7 @@ export interface Config extends IOSNativeModulesConfig { [name: string]: PlatformConfig; }; commands: Command[]; - healthChecks: HealthCheckCategory[]; + healthChecks: []; } /** @@ -275,7 +178,7 @@ export type UserDependencyConfig = { // An array of extra platforms to load platforms: Config['platforms']; // Additional health checks - healthChecks: HealthCheckCategory[]; + healthChecks: []; }; export { diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index 56e285251..75b7be237 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -5,8 +5,7 @@ import minimist from 'minimist'; import {validateProjectName} from './validate'; import DirectoryAlreadyExistsError from './errors/DirectoryAlreadyExistsError'; import printRunInstructions from './printRunInstructions'; -import {Loader} from '@react-native-community/cli-types'; -import {CLIError, logger, getLoader} from '@react-native-community/cli-tools'; +import {CLIError, logger, getLoader, Loader} from '@react-native-community/cli-tools'; import { installTemplatePackage, getTemplateConfig, @@ -84,8 +83,7 @@ async function createFromTemplate({ const projectDirectory = await setProjectDirectory(directory); - const Loader = getLoader(); - const loader = new Loader({text: 'Downloading template'}); + const loader = getLoader({text: 'Downloading template'}); const templateSourceDir = fs.mkdtempSync( path.join(os.tmpdir(), 'rncli-init-template-'), ); diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts index b7ad97798..3914f94c2 100644 --- a/packages/tools/src/index.ts +++ b/packages/tools/src/index.ts @@ -9,7 +9,7 @@ export {default as launchEditor} from './launchEditor'; export {default as releaseChecker} from './releaseChecker'; export {default as resolveNodeModuleDir} from './resolveNodeModuleDir'; export {default as hookStdout} from './hookStdout'; -export {getLoader, NoopLoader} from './loader'; +export {getLoader, NoopLoader, Loader} from './loader'; export {default as findProjectRoot} from './findProjectRoot'; export * from './errors'; diff --git a/packages/tools/src/loader.ts b/packages/tools/src/loader.ts index 50ff10352..4dd3d3d0f 100644 --- a/packages/tools/src/loader.ts +++ b/packages/tools/src/loader.ts @@ -1,9 +1,10 @@ import ora from 'ora'; -import type {Ora, Spinner, Color} from 'ora'; +import type {Ora, Options, Spinner, Color} from 'ora'; import logger from './logger'; -import type {Loader} from '@react-native-community/cli-types'; -class OraNoop implements Ora { +export type Loader = Ora; + +class OraNoop implements Loader { spinner: Spinner = {interval: 1, frames: []}; indent: number = 0; isSpinning: boolean = false; @@ -39,14 +40,13 @@ class OraNoop implements Ora { return this; } frame() { - return this.text; } } -export function getLoader(): Loader { - // FIXME refactor getLoader to not rely on class instantiation to avoid type conflict or implement an default Ora Loader Class definition - return logger.isVerbose() ? OraNoop : (ora as Loader); +export function getLoader(options?: string | Options | undefined): Loader { + return logger.isVerbose() ? new OraNoop() : ora(options); } export const NoopLoader = OraNoop; + From 851f0fc8b621f2434e7105f87fca888801a1b8f5 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 11:55:28 +0100 Subject: [PATCH 11/17] chore: eslint --- packages/cli-config/src/__tests__/findDependencies-test.ts | 6 +----- packages/cli-config/src/__tests__/index-test.ts | 6 +----- packages/cli-config/src/index.ts | 7 ++++++- packages/cli-config/src/resolveReactNativePath.ts | 5 ++++- packages/cli-doctor/src/index.ts | 4 ++-- packages/cli/src/commands/index.ts | 5 ++++- packages/cli/src/commands/init/init.ts | 7 ++++++- packages/tools/src/__tests__/findProjectRoot-test.ts | 6 +----- packages/tools/src/loader.ts | 1 - 9 files changed, 25 insertions(+), 22 deletions(-) diff --git a/packages/cli-config/src/__tests__/findDependencies-test.ts b/packages/cli-config/src/__tests__/findDependencies-test.ts index 4c3ea08eb..90a366faf 100644 --- a/packages/cli-config/src/__tests__/findDependencies-test.ts +++ b/packages/cli-config/src/__tests__/findDependencies-test.ts @@ -1,9 +1,5 @@ import findDependencies from '../findDependencies'; -import { - cleanup, - writeFiles, - getTempDirectory, -} from '../../../../jest/helpers'; +import {cleanup, writeFiles, getTempDirectory} from '../../../../jest/helpers'; beforeEach(async () => { await cleanup(DIR); diff --git a/packages/cli-config/src/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts index 41973ff21..dfd222238 100644 --- a/packages/cli-config/src/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -2,11 +2,7 @@ import path from 'path'; import slash from 'slash'; import loadConfig from '..'; import {logger} from '@react-native-community/cli-tools'; -import { - cleanup, - writeFiles, - getTempDirectory, -} from '../../../../jest/helpers'; +import {cleanup, writeFiles, getTempDirectory} from '../../../../jest/helpers'; jest.mock('../resolveNodeModuleDir'); diff --git a/packages/cli-config/src/index.ts b/packages/cli-config/src/index.ts index c1765660d..24e5c8887 100644 --- a/packages/cli-config/src/index.ts +++ b/packages/cli-config/src/index.ts @@ -7,7 +7,12 @@ import { UserConfig, Config, } from '@react-native-community/cli-types'; -import {logger, inlineString, findProjectRoot, resolveNodeModuleDir} from '@react-native-community/cli-tools'; +import { + logger, + inlineString, + findProjectRoot, + resolveNodeModuleDir, +} from '@react-native-community/cli-tools'; import findDependencies from './findDependencies'; import resolveReactNativePath from './resolveReactNativePath'; import findAssets from './findAssets'; diff --git a/packages/cli-config/src/resolveReactNativePath.ts b/packages/cli-config/src/resolveReactNativePath.ts index 1702c0113..a3b8403b7 100644 --- a/packages/cli-config/src/resolveReactNativePath.ts +++ b/packages/cli-config/src/resolveReactNativePath.ts @@ -1,4 +1,7 @@ -import {CLIError, resolveNodeModuleDir} from '@react-native-community/cli-tools'; +import { + CLIError, + resolveNodeModuleDir, +} from '@react-native-community/cli-tools'; /** * Finds path to React Native inside `node_modules` or throws diff --git a/packages/cli-doctor/src/index.ts b/packages/cli-doctor/src/index.ts index 6cb85db98..c15fcc4e5 100644 --- a/packages/cli-doctor/src/index.ts +++ b/packages/cli-doctor/src/index.ts @@ -5,7 +5,7 @@ export const commands = {info, doctor}; /** * @todo - * We should not rely on this file from other packages, e.g. CLI. We probably need to + * We should not rely on this file from other packages, e.g. CLI. We probably need to * refactor the init in order to remove that connection. */ -export {default as installPods} from './tools/installPods'; \ No newline at end of file +export {default as installPods} from './tools/installPods'; diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index c9e808952..d8e5f9588 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -22,4 +22,7 @@ export const projectCommands = [ profileHermes, ] as Command[]; -export const detachedCommands = [init, doctorCommands.doctor] as DetachedCommand[]; +export const detachedCommands = [ + init, + doctorCommands.doctor, +] as DetachedCommand[]; diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index 75b7be237..416315a62 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -5,7 +5,12 @@ import minimist from 'minimist'; import {validateProjectName} from './validate'; import DirectoryAlreadyExistsError from './errors/DirectoryAlreadyExistsError'; import printRunInstructions from './printRunInstructions'; -import {CLIError, logger, getLoader, Loader} from '@react-native-community/cli-tools'; +import { + CLIError, + logger, + getLoader, + Loader, +} from '@react-native-community/cli-tools'; import { installTemplatePackage, getTemplateConfig, diff --git a/packages/tools/src/__tests__/findProjectRoot-test.ts b/packages/tools/src/__tests__/findProjectRoot-test.ts index cbb96c0c4..7b1ba2cc2 100644 --- a/packages/tools/src/__tests__/findProjectRoot-test.ts +++ b/packages/tools/src/__tests__/findProjectRoot-test.ts @@ -1,10 +1,6 @@ import path from 'path'; import findProjectRoot from '../findProjectRoot'; -import { - cleanup, - writeFiles, - getTempDirectory, -} from '../../../../jest/helpers'; +import {cleanup, writeFiles, getTempDirectory} from '../../../../jest/helpers'; beforeEach(async () => { await cleanup(DIR); diff --git a/packages/tools/src/loader.ts b/packages/tools/src/loader.ts index 4dd3d3d0f..f4ef0524d 100644 --- a/packages/tools/src/loader.ts +++ b/packages/tools/src/loader.ts @@ -49,4 +49,3 @@ export function getLoader(options?: string | Options | undefined): Loader { } export const NoopLoader = OraNoop; - From 27a447a9fb79b2189f8ab9eb317ab1a167432a36 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 12:17:32 +0100 Subject: [PATCH 12/17] downgrade Ora to 5.4 - ESM not supported yet --- packages/cli-doctor/package.json | 2 +- packages/platform-ios/package.json | 2 +- packages/tools/package.json | 2 +- yarn.lock | 118 +++++++++++------------------ 4 files changed, 46 insertions(+), 78 deletions(-) diff --git a/packages/cli-doctor/package.json b/packages/cli-doctor/package.json index 3d6c1c384..050fcecbc 100644 --- a/packages/cli-doctor/package.json +++ b/packages/cli-doctor/package.json @@ -19,7 +19,7 @@ "prompts": "^2.4.0", "semver": "^6.3.0", "strip-ansi": "^5.2.0", - "ora": "^6.0.0", + "ora": "^5.4.1", "execa": "^1.0.0", "wcwidth": "^1.0.1", "sudo-prompt": "^9.0.0" diff --git a/packages/platform-ios/package.json b/packages/platform-ios/package.json index 132399cbd..325a8f0ba 100644 --- a/packages/platform-ios/package.json +++ b/packages/platform-ios/package.json @@ -12,7 +12,7 @@ "glob": "^7.1.3", "js-yaml": "^3.13.1", "lodash": "^4.17.15", - "ora": "^6.0.0", + "ora": "^5.4.1", "plist": "^3.0.2", "xcode": "^3.0.0" }, diff --git a/packages/tools/package.json b/packages/tools/package.json index a46686b3e..a9f455e06 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -13,7 +13,7 @@ "mime": "^2.4.1", "node-fetch": "^2.6.0", "open": "^6.2.0", - "ora": "^6.0.0", + "ora": "^5.4.1", "semver": "^6.3.0", "shell-quote": "^1.7.3" }, diff --git a/yarn.lock b/yarn.lock index 5147f8709..d71278683 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2821,11 +2821,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -3301,12 +3296,12 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2" - integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - buffer "^6.0.3" + buffer "^5.5.0" inherits "^2.0.4" readable-stream "^3.4.0" @@ -3493,13 +3488,13 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" - ieee754 "^1.2.1" + ieee754 "^1.1.13" builtin-status-codes@^3.0.0: version "3.0.0" @@ -3692,11 +3687,6 @@ chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832" - integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ== - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -3798,19 +3788,12 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - cli-spinners@^1.1.0: version "1.3.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== -cli-spinners@^2.6.0: +cli-spinners@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== @@ -6357,16 +6340,16 @@ icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore-walk@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" @@ -6780,10 +6763,10 @@ is-html@^1.1.0: dependencies: html-tags "^1.0.0" -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" @@ -6948,10 +6931,10 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.1.0.tgz#9127b71f9fa82f52ca5c20e982e7bec0ee31ee1e" - integrity sha512-lDcxivp8TJpLG75/DpatAqNzOpDPSpED8XNtrpBHTdQ2InQ1PbW78jhwSxyxhhu+xbVSast2X38bwj8atwoUQA== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-url@^1.2.2: version "1.2.4" @@ -8030,13 +8013,13 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-symbols@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" logkitty@^0.7.1: version "0.7.1" @@ -9310,19 +9293,19 @@ ora@^2.1.0: strip-ansi "^4.0.0" wcwidth "^1.0.1" -ora@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-6.0.1.tgz#68caa9fd6c485a40d6f46c50a3940fa3df99c7f3" - integrity sha512-TDdKkKHdWE6jo/6pIa5U5AWcSVfpNRFJ8sdRJpioGNVPLAzZzHs/N+QhUfF7ZbyoC+rnDuNTKzeDJUbAza9g4g== - dependencies: - bl "^5.0.0" - chalk "^4.1.2" - cli-cursor "^4.0.0" - cli-spinners "^2.6.0" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.0.0" - strip-ansi "^7.0.1" +ora@^5.6.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" wcwidth "^1.0.1" os-browserify@^0.3.0: @@ -10788,14 +10771,6 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -11603,13 +11578,6 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" From 2c694e6c8e14c914bf117962e6d58bf2415c8973 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 14:54:21 +0100 Subject: [PATCH 13/17] Apply review --- packages/cli-doctor/src/commands/doctor.ts | 2 +- packages/cli-types/src/index.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli-doctor/src/commands/doctor.ts b/packages/cli-doctor/src/commands/doctor.ts index 5dd0c2d6a..91d17e757 100644 --- a/packages/cli-doctor/src/commands/doctor.ts +++ b/packages/cli-doctor/src/commands/doctor.ts @@ -269,7 +269,7 @@ export default { detached: true, name: 'doctor', description: - '[EXPERIMENTAL] Diagnose and fix common Node.js, iOS, Android & React Native issues.', + 'Diagnose and fix common Node.js, iOS, Android & React Native issues.', options: [ { name: '--fix', diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index 757cc95d8..ecfa0e8fe 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -152,6 +152,7 @@ export interface Config extends IOSNativeModulesConfig { [name: string]: PlatformConfig; }; commands: Command[]; + // @todo this should be removed: https://github.com/react-native-community/cli/issues/1261 healthChecks: []; } From 1abaf1cd8ecfd03786145b98cb87c87e4166e81c Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 15:58:58 +0100 Subject: [PATCH 14/17] fix: jest tests --- .../src/__mocks__/resolveNodeModuleDir.ts | 8 -------- packages/cli-config/src/__tests__/index-test.ts | 8 +++++--- .../cli-doctor/src/commands/__tests__/info.test.ts | 2 +- .../tools/healthchecks/__tests__/androidNDK.test.ts | 6 ------ .../tools/healthchecks/__tests__/androidSDK.test.ts | 13 +++++++------ .../src/tools/healthchecks/__tests__/jdk.test.ts | 13 ++++--------- packages/cli/package.json | 1 + .../cli/src/commands/link/__tests__/link.test.ts | 2 +- .../@react-native-community/cli-config.ts} | 0 .../upgrade/__tests__/upgrade-testing-methods.ts | 5 +++-- 10 files changed, 22 insertions(+), 36 deletions(-) delete mode 100644 packages/cli-config/src/__mocks__/resolveNodeModuleDir.ts rename packages/{cli-config/src/__mocks__/index.ts => cli/src/commands/upgrade/__mocks__/@react-native-community/cli-config.ts} (100%) diff --git a/packages/cli-config/src/__mocks__/resolveNodeModuleDir.ts b/packages/cli-config/src/__mocks__/resolveNodeModuleDir.ts deleted file mode 100644 index 734d229a4..000000000 --- a/packages/cli-config/src/__mocks__/resolveNodeModuleDir.ts +++ /dev/null @@ -1,8 +0,0 @@ -import path from 'path'; - -export default function resolveNodeModuleDir( - root: string, - packageName: string, -): string { - return path.join(root, 'node_modules', packageName); -} diff --git a/packages/cli-config/src/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts index dfd222238..acd2afb8a 100644 --- a/packages/cli-config/src/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -4,8 +4,6 @@ import loadConfig from '..'; import {logger} from '@react-native-community/cli-tools'; import {cleanup, writeFiles, getTempDirectory} from '../../../../jest/helpers'; -jest.mock('../resolveNodeModuleDir'); - let DIR = getTempDirectory('config_test'); const iosPath = slash( @@ -41,8 +39,11 @@ const REACT_NATIVE_MOCK = { const removeString = (config, str) => JSON.parse( JSON.stringify(config, (_key, value) => + // In certain cases, `str` (which is a temporary location) will be `/tmp` + // which is a symlink to `/private/tmp` on OS X. In this case, tests will fail. + // Following RegExp makes sure we strip the entire path. typeof value === 'string' - ? slash(value.replace(str, '<>')) + ? slash(value.replace(new RegExp(`(.*)${str}`), '<>')) : value, ), ); @@ -107,6 +108,7 @@ test('should read a config of a dependency and use it to load other settings', ( }`, }); const {dependencies} = loadConfig(DIR); + console.log(dependencies['react-native-test'], DIR); expect( removeString(dependencies['react-native-test'], DIR), ).toMatchSnapshot(); diff --git a/packages/cli-doctor/src/commands/__tests__/info.test.ts b/packages/cli-doctor/src/commands/__tests__/info.test.ts index 15b54dbbb..03ac69083 100644 --- a/packages/cli-doctor/src/commands/__tests__/info.test.ts +++ b/packages/cli-doctor/src/commands/__tests__/info.test.ts @@ -2,7 +2,7 @@ import info from '../info'; import {logger} from '@react-native-community/cli-tools'; import loadConfig from '@react-native-community/cli-config'; -jest.mock('../../../tools/config'); +jest.mock('@react-native-community/cli-config'); beforeEach(() => { jest.resetAllMocks(); diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts index 2ea0fc8be..f8add4a5b 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidNDK.test.ts @@ -19,12 +19,6 @@ describe('androidNDK', () => { jest.resetAllMocks(); }); - it('returns a message if the Android SDK is not installed', async () => { - environmentInfo.SDKs['Android SDK'] = 'Not Found'; - const diagnostics = await androidNDK.getDiagnostics(environmentInfo); - expect(diagnostics.needsToBeFixed).toBe(true); - }); - it('returns a message if the Android NDK is not installed', async () => { // To avoid having to provide fake versions for all the Android SDK tools // @ts-ignore diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts index 19d3b1b8e..4f6994e16 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/androidSDK.test.ts @@ -6,7 +6,7 @@ import androidSDK from '../androidSDK'; import getEnvironmentInfo from '../../envinfo'; import * as downloadAndUnzip from '../../downloadAndUnzip'; import {EnvironmentInfo} from '../../../types'; -import {NoopLoader} from '@react-native-community/cli-tools'; +import * as tools from '@react-native-community/cli-tools'; import * as common from '../common'; import * as androidWinHelpers from '../../windows/androidWinHelpers'; import * as environmentVariables from '../../windows/environmentVariables'; @@ -19,9 +19,10 @@ jest.mock('execa', () => jest.fn()); let mockWorkingDir = ''; // TODO remove when androidSDK starts getting gradle.build path from config -jest.mock('../../../../cli/src/tools/config/findProjectRoot', () => () => { - return mockWorkingDir; -}); +jest.mock('@react-native-community/cli-tools', () => ({ + ...jest.requireActual('@react-native-community/cli-tools'), + findProjectRoot: () => mockWorkingDir, +})); describe('androidSDK', () => { beforeEach(() => { @@ -90,7 +91,7 @@ describe('androidSDK', () => { }); it('logs manual installation steps to the screen for the default fix', () => { - const loader = new NoopLoader(); + const loader = new tools.NoopLoader(); androidSDK.runAutomaticFix({ loader, logManualInstallation, @@ -100,7 +101,7 @@ describe('androidSDK', () => { }); it('installs the SDK if it is missing on Windows', async () => { - const loader = new NoopLoader(); + const loader = new tools.NoopLoader(); const loaderSucceedSpy = jest.spyOn(loader, 'succeed'); const loaderFailSpy = jest.spyOn(loader, 'fail'); const downloadAndUnzipSpy = jest diff --git a/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts index db1c8bebe..fab3cf43f 100644 --- a/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts +++ b/packages/cli-doctor/src/tools/healthchecks/__tests__/jdk.test.ts @@ -2,7 +2,7 @@ import execa from 'execa'; import jdk from '../jdk'; import getEnvironmentInfo from '../../envinfo'; import {EnvironmentInfo} from '../../../types'; -import {NoopLoader} from '@react-native-community/cli-tools'; +import * as tools from '@react-native-community/cli-tools'; import * as common from '../common'; import * as unzip from '../../unzip'; import * as deleteFile from '../../deleteFile'; @@ -12,12 +12,7 @@ jest .spyOn(deleteFile, 'deleteFile') .mockImplementation(() => Promise.resolve()); -const mockFetchToTemp = jest.fn(); -jest.mock('@react-native-community/cli-tools', () => { - return { - fetchToTemp: mockFetchToTemp, - }; -}); +jest.spyOn(tools, 'fetchToTemp').mockImplementation(jest.fn()); const logSpy = jest.spyOn(common, 'logManualInstallation'); const {logManualInstallation} = common; @@ -71,13 +66,13 @@ describe('jdk', () => { }); it('logs manual installation steps to the screen for the default fix', async () => { - const loader = new NoopLoader(); + const loader = new tools.NoopLoader(); await jdk.runAutomaticFix({loader, logManualInstallation, environmentInfo}); expect(logSpy).toHaveBeenCalledTimes(1); }); it('downloads and unzips JDK on Windows when missing', async () => { - const loader = new NoopLoader(); + const loader = new tools.NoopLoader(); const loaderSucceedSpy = jest.spyOn(loader, 'succeed'); const loaderFailSpy = jest.spyOn(loader, 'fail'); const unzipSpy = jest diff --git a/packages/cli/package.json b/packages/cli/package.json index e5ceb310d..98810c5c2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -55,6 +55,7 @@ "@types/minimist": "^1.2.0", "@types/prompts": "^2.0.9", "@types/semver": "^6.0.2", + "deepmerge": "^3.2.0", "slash": "^3.0.0", "snapshot-diff": "^0.7.0" }, diff --git a/packages/cli/src/commands/link/__tests__/link.test.ts b/packages/cli/src/commands/link/__tests__/link.test.ts index b80126cad..5c9d5d604 100644 --- a/packages/cli/src/commands/link/__tests__/link.test.ts +++ b/packages/cli/src/commands/link/__tests__/link.test.ts @@ -7,7 +7,7 @@ jest.mock('chalk', () => ({ bold: jest.fn(), dim: {underline: jest.fn()}, })); -jest.mock('../../../tools/config'); +jest.mock('@react-native-community/cli-config'); jest.mock('../makeHook', () => { return jest.fn(() => { return jest.fn(() => Promise.resolve()); diff --git a/packages/cli-config/src/__mocks__/index.ts b/packages/cli/src/commands/upgrade/__mocks__/@react-native-community/cli-config.ts similarity index 100% rename from packages/cli-config/src/__mocks__/index.ts rename to packages/cli/src/commands/upgrade/__mocks__/@react-native-community/cli-config.ts diff --git a/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts b/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts index 178441599..40d45b3fe 100644 --- a/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts +++ b/packages/cli/src/commands/upgrade/__tests__/upgrade-testing-methods.ts @@ -1,18 +1,19 @@ import execa from 'execa'; import path from 'path'; +import merge from 'deepmerge'; import fs from 'fs'; import snapshotDiff from 'snapshot-diff'; import stripAnsi from 'strip-ansi'; import upgrade from '../upgrade'; import {fetch, logger} from '@react-native-community/cli-tools'; -import loadConfig, {merge} from '@react-native-community/cli-config'; +import loadConfig from '@react-native-community/cli-config'; jest.mock('https'); jest.mock('fs'); jest.mock('path'); jest.mock('execa'); -jest.mock('../../../tools/config'); +jest.mock('@react-native-community/cli-config'); jest.mock('../../../tools/packageManager', () => ({ install: (args) => { mockPushLog('$ yarn add', ...args); From 5d98d16d005de4e2d3d02243b0eb81d160a03e5f Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 16:31:50 +0100 Subject: [PATCH 15/17] chore remove console log --- packages/cli-config/src/__tests__/index-test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli-config/src/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts index acd2afb8a..f11e7953c 100644 --- a/packages/cli-config/src/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -108,7 +108,6 @@ test('should read a config of a dependency and use it to load other settings', ( }`, }); const {dependencies} = loadConfig(DIR); - console.log(dependencies['react-native-test'], DIR); expect( removeString(dependencies['react-native-test'], DIR), ).toMatchSnapshot(); From d61a1096f336cc287f92e779be15c574677a1903 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 16:33:23 +0100 Subject: [PATCH 16/17] fix snapshot --- __e2e__/__snapshots__/default.test.ts.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__e2e__/__snapshots__/default.test.ts.snap b/__e2e__/__snapshots__/default.test.ts.snap index e93e1d88c..e72e6c249 100644 --- a/__e2e__/__snapshots__/default.test.ts.snap +++ b/__e2e__/__snapshots__/default.test.ts.snap @@ -10,5 +10,5 @@ Options: Commands: init [options] Initialize a new React Native project named in a directory of the same name. - doctor [options] [EXPERIMENTAL] Diagnose and fix common Node.js, iOS, Android & React Native issues." + doctor [options] Diagnose and fix common Node.js, iOS, Android & React Native issues." `; From 710c7735779844bec0af95183114bc2f95518cc1 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 26 Jan 2022 18:41:39 +0100 Subject: [PATCH 17/17] chore: fix test --- jest/setupUnitTests.js | 1 - .../src/__tests__/__snapshots__/index-test.ts.snap | 2 +- packages/cli-config/src/__tests__/index-test.ts | 7 ++++--- packages/tools/src/__mocks__/logger.ts | 10 ---------- 4 files changed, 5 insertions(+), 15 deletions(-) delete mode 100644 packages/tools/src/__mocks__/logger.ts diff --git a/jest/setupUnitTests.js b/jest/setupUnitTests.js index 074e38aa0..6614a458b 100644 --- a/jest/setupUnitTests.js +++ b/jest/setupUnitTests.js @@ -14,5 +14,4 @@ jest.mock('@react-native-community/cli-tools', () => { }, }; }); - jest.setTimeout(20000); diff --git a/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap index 5a393bfdc..4b11e87ce 100644 --- a/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap +++ b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap @@ -153,7 +153,7 @@ Object { exports[`should skip packages that have invalid configuration: dependencies config 1`] = `Object {}`; -exports[`should skip packages that have invalid configuration: logged warning 1`] = `"Package react-native has been ignored because it contains invalid configuration. Reason: \\"dependency.invalidProperty\\" is not allowed"`; +exports[`should skip packages that have invalid configuration: logged warning 1`] = `"warn Package react-native has been ignored because it contains invalid configuration. Reason: \\"dependency.invalidProperty\\" is not allowed"`; exports[`supports dependencies from user configuration with custom build type 1`] = ` Object { diff --git a/packages/cli-config/src/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts index f11e7953c..b1100fdaf 100644 --- a/packages/cli-config/src/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -1,11 +1,14 @@ import path from 'path'; import slash from 'slash'; import loadConfig from '..'; -import {logger} from '@react-native-community/cli-tools'; import {cleanup, writeFiles, getTempDirectory} from '../../../../jest/helpers'; let DIR = getTempDirectory('config_test'); +jest.dontMock('@react-native-community/cli-tools'); + +const spy = jest.spyOn(global.console, 'warn').mockImplementation(jest.fn()); + const iosPath = slash( require.resolve('@react-native-community/cli-platform-ios'), ); @@ -199,7 +202,6 @@ test('should skip packages that have invalid configuration', () => { } }`, }); - const spy = jest.spyOn(logger, 'warn'); const {dependencies} = loadConfig(DIR); expect(dependencies).toMatchSnapshot('dependencies config'); expect(spy.mock.calls[0][0]).toMatchSnapshot('logged warning'); @@ -217,7 +219,6 @@ test('does not use restricted "react-native" key to resolve config from package. } }`, }); - const spy = jest.spyOn(logger, 'warn'); const {dependencies} = loadConfig(DIR); expect(dependencies).toHaveProperty('react-native-netinfo'); expect(spy).not.toHaveBeenCalled(); diff --git a/packages/tools/src/__mocks__/logger.ts b/packages/tools/src/__mocks__/logger.ts deleted file mode 100644 index 8cc725657..000000000 --- a/packages/tools/src/__mocks__/logger.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -module.exports.out = () => jest.fn(); -module.exports.err = () => jest.fn();