From 86e788e9f3f85fd24a87d4fdfd8b51554b8fe52c Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Fri, 5 Apr 2019 23:25:35 +0200 Subject: [PATCH 01/11] wip --- packages/cli/src/commands/index.js | 8 -------- packages/cli/src/tools/config/index.js | 1 + packages/platform-android/src/commands/index.js | 7 +++++++ .../src/commands/logAndroid/logAndroid.js | 0 .../commands/runAndroid/__tests__/runOnAllDevices.test.js | 0 .../src/commands/runAndroid/adb.js | 0 .../src/commands/runAndroid/getAdbPath.js | 0 .../src/commands/runAndroid/runAndroid.js | 0 .../src/commands/runAndroid/runOnAllDevices.js | 0 .../src/commands/runAndroid/tryLaunchAppOnDevice.js | 0 .../src/commands/runAndroid/tryRunAdbReverse.js | 0 packages/platform-android/src/index.js | 1 + packages/platform-ios/src/commands/index.js | 7 +++++++ .../{cli => platform-ios}/src/commands/logIOS/logIOS.js | 0 .../runIOS/__tests__/findMatchingSimulator-test.js | 0 .../commands/runIOS/__tests__/findXcodeProject-test.js | 0 .../commands/runIOS/__tests__/parseIOSDevicesList-test.js | 0 .../src/commands/runIOS/findMatchingSimulator.js | 0 .../src/commands/runIOS/findXcodeProject.js | 0 .../src/commands/runIOS/parseIOSDevicesList.js | 0 .../{cli => platform-ios}/src/commands/runIOS/runIOS.js | 0 packages/platform-ios/src/index.js | 1 + 22 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 packages/platform-android/src/commands/index.js rename packages/{cli => platform-android}/src/commands/logAndroid/logAndroid.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/__tests__/runOnAllDevices.test.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/adb.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/getAdbPath.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/runAndroid.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/runOnAllDevices.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/tryLaunchAppOnDevice.js (100%) rename packages/{cli => platform-android}/src/commands/runAndroid/tryRunAdbReverse.js (100%) create mode 100644 packages/platform-ios/src/commands/index.js rename packages/{cli => platform-ios}/src/commands/logIOS/logIOS.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/__tests__/findMatchingSimulator-test.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/__tests__/findXcodeProject-test.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/__tests__/parseIOSDevicesList-test.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/findMatchingSimulator.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/findXcodeProject.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/parseIOSDevicesList.js (100%) rename packages/{cli => platform-ios}/src/commands/runIOS/runIOS.js (100%) diff --git a/packages/cli/src/commands/index.js b/packages/cli/src/commands/index.js index 86920456c..cd5019c8c 100644 --- a/packages/cli/src/commands/index.js +++ b/packages/cli/src/commands/index.js @@ -11,8 +11,6 @@ import type { import {type ContextT} from '../tools/types.flow'; import server from './server/server'; -import runIOS from './runIOS/runIOS'; -import runAndroid from './runAndroid/runAndroid'; import library from './library/library'; import bundle from './bundle/bundle'; import ramBundle from './bundle/ramBundle'; @@ -21,8 +19,6 @@ import unlink from './link/unlink'; import install from './install/install'; import uninstall from './install/uninstall'; import upgrade from './upgrade/upgrade'; -import logAndroid from './logAndroid/logAndroid'; -import logIOS from './logIOS/logIOS'; import info from './info/info'; import config from './config/config'; import init from './init'; @@ -33,8 +29,6 @@ import init from './init'; const loadLocalCommands: Array = [ server, - runIOS, - runAndroid, library, bundle, ramBundle, @@ -43,8 +37,6 @@ const loadLocalCommands: Array = [ install, uninstall, upgrade, - logAndroid, - logIOS, info, config, init, diff --git a/packages/cli/src/tools/config/index.js b/packages/cli/src/tools/config/index.js index 03df4add4..da656585d 100644 --- a/packages/cli/src/tools/config/index.js +++ b/packages/cli/src/tools/config/index.js @@ -51,6 +51,7 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { // @todo: Move this to React Native in the future if (dependencyName === 'react-native') { config.platforms = {ios, android}; + config.commands = [...ios.commands, ...android.commands]; } const isPlatform = Object.keys(config.platforms).length > 0; diff --git a/packages/platform-android/src/commands/index.js b/packages/platform-android/src/commands/index.js new file mode 100644 index 000000000..572c30950 --- /dev/null +++ b/packages/platform-android/src/commands/index.js @@ -0,0 +1,7 @@ +/** + * @flow + */ +import logAndroid from './logAndroid/logAndroid'; +import runAndroid from './runAndroid/runAndroid'; + +export default [logAndroid, runAndroid]; diff --git a/packages/cli/src/commands/logAndroid/logAndroid.js b/packages/platform-android/src/commands/logAndroid/logAndroid.js similarity index 100% rename from packages/cli/src/commands/logAndroid/logAndroid.js rename to packages/platform-android/src/commands/logAndroid/logAndroid.js diff --git a/packages/cli/src/commands/runAndroid/__tests__/runOnAllDevices.test.js b/packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.js similarity index 100% rename from packages/cli/src/commands/runAndroid/__tests__/runOnAllDevices.test.js rename to packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.js diff --git a/packages/cli/src/commands/runAndroid/adb.js b/packages/platform-android/src/commands/runAndroid/adb.js similarity index 100% rename from packages/cli/src/commands/runAndroid/adb.js rename to packages/platform-android/src/commands/runAndroid/adb.js diff --git a/packages/cli/src/commands/runAndroid/getAdbPath.js b/packages/platform-android/src/commands/runAndroid/getAdbPath.js similarity index 100% rename from packages/cli/src/commands/runAndroid/getAdbPath.js rename to packages/platform-android/src/commands/runAndroid/getAdbPath.js diff --git a/packages/cli/src/commands/runAndroid/runAndroid.js b/packages/platform-android/src/commands/runAndroid/runAndroid.js similarity index 100% rename from packages/cli/src/commands/runAndroid/runAndroid.js rename to packages/platform-android/src/commands/runAndroid/runAndroid.js diff --git a/packages/cli/src/commands/runAndroid/runOnAllDevices.js b/packages/platform-android/src/commands/runAndroid/runOnAllDevices.js similarity index 100% rename from packages/cli/src/commands/runAndroid/runOnAllDevices.js rename to packages/platform-android/src/commands/runAndroid/runOnAllDevices.js diff --git a/packages/cli/src/commands/runAndroid/tryLaunchAppOnDevice.js b/packages/platform-android/src/commands/runAndroid/tryLaunchAppOnDevice.js similarity index 100% rename from packages/cli/src/commands/runAndroid/tryLaunchAppOnDevice.js rename to packages/platform-android/src/commands/runAndroid/tryLaunchAppOnDevice.js diff --git a/packages/cli/src/commands/runAndroid/tryRunAdbReverse.js b/packages/platform-android/src/commands/runAndroid/tryRunAdbReverse.js similarity index 100% rename from packages/cli/src/commands/runAndroid/tryRunAdbReverse.js rename to packages/platform-android/src/commands/runAndroid/tryRunAdbReverse.js diff --git a/packages/platform-android/src/index.js b/packages/platform-android/src/index.js index 88ea2ac7e..d7cabc044 100644 --- a/packages/platform-android/src/index.js +++ b/packages/platform-android/src/index.js @@ -5,4 +5,5 @@ */ export {default as linkConfig} from './link'; +export {default as commands} from './commands'; export {projectConfig, dependencyConfig} from './config'; diff --git a/packages/platform-ios/src/commands/index.js b/packages/platform-ios/src/commands/index.js new file mode 100644 index 000000000..05fb52583 --- /dev/null +++ b/packages/platform-ios/src/commands/index.js @@ -0,0 +1,7 @@ +/** + * @flow + */ +import logIOS from './logIOS/logIOS'; +import runIOS from './runIOS/runIOS'; + +export default [logIOS, runIOS]; diff --git a/packages/cli/src/commands/logIOS/logIOS.js b/packages/platform-ios/src/commands/logIOS/logIOS.js similarity index 100% rename from packages/cli/src/commands/logIOS/logIOS.js rename to packages/platform-ios/src/commands/logIOS/logIOS.js diff --git a/packages/cli/src/commands/runIOS/__tests__/findMatchingSimulator-test.js b/packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator-test.js similarity index 100% rename from packages/cli/src/commands/runIOS/__tests__/findMatchingSimulator-test.js rename to packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator-test.js diff --git a/packages/cli/src/commands/runIOS/__tests__/findXcodeProject-test.js b/packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject-test.js similarity index 100% rename from packages/cli/src/commands/runIOS/__tests__/findXcodeProject-test.js rename to packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject-test.js diff --git a/packages/cli/src/commands/runIOS/__tests__/parseIOSDevicesList-test.js b/packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList-test.js similarity index 100% rename from packages/cli/src/commands/runIOS/__tests__/parseIOSDevicesList-test.js rename to packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList-test.js diff --git a/packages/cli/src/commands/runIOS/findMatchingSimulator.js b/packages/platform-ios/src/commands/runIOS/findMatchingSimulator.js similarity index 100% rename from packages/cli/src/commands/runIOS/findMatchingSimulator.js rename to packages/platform-ios/src/commands/runIOS/findMatchingSimulator.js diff --git a/packages/cli/src/commands/runIOS/findXcodeProject.js b/packages/platform-ios/src/commands/runIOS/findXcodeProject.js similarity index 100% rename from packages/cli/src/commands/runIOS/findXcodeProject.js rename to packages/platform-ios/src/commands/runIOS/findXcodeProject.js diff --git a/packages/cli/src/commands/runIOS/parseIOSDevicesList.js b/packages/platform-ios/src/commands/runIOS/parseIOSDevicesList.js similarity index 100% rename from packages/cli/src/commands/runIOS/parseIOSDevicesList.js rename to packages/platform-ios/src/commands/runIOS/parseIOSDevicesList.js diff --git a/packages/cli/src/commands/runIOS/runIOS.js b/packages/platform-ios/src/commands/runIOS/runIOS.js similarity index 100% rename from packages/cli/src/commands/runIOS/runIOS.js rename to packages/platform-ios/src/commands/runIOS/runIOS.js diff --git a/packages/platform-ios/src/index.js b/packages/platform-ios/src/index.js index b0da4421c..40e87c381 100644 --- a/packages/platform-ios/src/index.js +++ b/packages/platform-ios/src/index.js @@ -5,4 +5,5 @@ */ export {default as linkConfig} from './link'; +export {default as commands} from './commands'; export {projectConfig, dependencyConfig} from './config'; From 28c63ae74cccb3ddfd777a76a1721fd2e2831c39 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 9 Apr 2019 15:22:21 +0200 Subject: [PATCH 02/11] Finish it up --- packages/cli/src/tools/errors.js | 7 ------ .../commands/runAndroid}/isPackagerRunning.js | 0 .../src/commands/runAndroid/runAndroid.js | 4 +-- .../src/commands/runIOS/runIOS.js | 25 +++++++++++-------- 4 files changed, 16 insertions(+), 20 deletions(-) rename packages/{cli/src/tools => platform-android/src/commands/runAndroid}/isPackagerRunning.js (100%) diff --git a/packages/cli/src/tools/errors.js b/packages/cli/src/tools/errors.js index 6c2dfb159..6cc864e55 100644 --- a/packages/cli/src/tools/errors.js +++ b/packages/cli/src/tools/errors.js @@ -25,13 +25,6 @@ export class CLIError extends Error { } } -export class ProcessError extends Error { - constructor(msg: string, processError: string) { - super(`${chalk.red(msg)}\n\n${chalk.gray(processError)}`); - Error.captureStackTrace(this, ProcessError); - } -} - type JoiErrorDetails = { message: string, path: string[], diff --git a/packages/cli/src/tools/isPackagerRunning.js b/packages/platform-android/src/commands/runAndroid/isPackagerRunning.js similarity index 100% rename from packages/cli/src/tools/isPackagerRunning.js rename to packages/platform-android/src/commands/runAndroid/isPackagerRunning.js diff --git a/packages/platform-android/src/commands/runAndroid/runAndroid.js b/packages/platform-android/src/commands/runAndroid/runAndroid.js index ac5577ffa..682cbd51e 100644 --- a/packages/platform-android/src/commands/runAndroid/runAndroid.js +++ b/packages/platform-android/src/commands/runAndroid/runAndroid.js @@ -12,11 +12,11 @@ import {spawnSync, spawn, execFileSync} from 'child_process'; import fs from 'fs'; import isString from 'lodash/isString'; -import isPackagerRunning from '../../tools/isPackagerRunning'; -import type {ContextT} from '../../tools/types.flow'; +import type {ContextT} from '../../../../cli/src/tools/types.flow'; import adb from './adb'; import runOnAllDevices from './runOnAllDevices'; +import isPackagerRunning from './isPackagerRunning'; import tryRunAdbReverse from './tryRunAdbReverse'; import tryLaunchAppOnDevice from './tryLaunchAppOnDevice'; import getAdbPath from './getAdbPath'; diff --git a/packages/platform-ios/src/commands/runIOS/runIOS.js b/packages/platform-ios/src/commands/runIOS/runIOS.js index 20e968e1a..2e488396f 100644 --- a/packages/platform-ios/src/commands/runIOS/runIOS.js +++ b/packages/platform-ios/src/commands/runIOS/runIOS.js @@ -9,13 +9,13 @@ */ import child_process from 'child_process'; +import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; -import type {ContextT} from '../../tools/types.flow'; +import type {ContextT} from '../../../../cli/src/tools/types.flow'; import findXcodeProject from './findXcodeProject'; import parseIOSDevicesList from './parseIOSDevicesList'; import findMatchingSimulator from './findMatchingSimulator'; -import {ProcessError} from '../../tools/errors'; import {logger} from '@react-native-community/cli-tools'; type FlagsT = { @@ -311,15 +311,18 @@ function buildProject( } if (code !== 0) { reject( - new ProcessError( - [ - 'Failed to build iOS project.', - `We ran "xcodebuild" command but it exited with error code ${code}.`, - `To debug build logs further, consider building your app with Xcode.app, by opening ${ - xcodeProject.name - }`, - ].join(' '), - errorOutput, + new Error( + chalk.red( + [ + 'Failed to build iOS project.', + `We ran "xcodebuild" command but it exited with error code ${code}.`, + `To debug build logs further, consider building your app with Xcode.app, by opening ${ + xcodeProject.name + }`, + ].join(' '), + ) + + '\n\n' + + chalk.gray(errorOutput), ), ); return; From 4ff040c57d3741d3360a429123bdbf1decf7732d Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 9 Apr 2019 15:26:13 +0200 Subject: [PATCH 03/11] Clean up packages --- packages/cli/package.json | 1 - packages/platform-android/package.json | 4 +++- .../platform-android/src/commands/runAndroid/runAndroid.js | 3 +-- packages/platform-ios/package.json | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index a40dab5de..287ce1f58 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -39,7 +39,6 @@ "inquirer": "^3.0.6", "joi": "^14.3.1", "lodash": "^4.17.5", - "logkitty": "^0.4.0", "metro": "^0.53.1", "metro-config": "^0.53.1", "metro-core": "^0.53.1", diff --git a/packages/platform-android/package.json b/packages/platform-android/package.json index e5c82060c..03b2a1cd2 100644 --- a/packages/platform-android/package.json +++ b/packages/platform-android/package.json @@ -3,6 +3,8 @@ "version": "2.0.0-alpha.5", "main": "build/index.js", "dependencies": { - "@react-native-community/cli-tools": "^2.0.0-alpha.5" + "@react-native-community/cli-tools": "^2.0.0-alpha.5", + "node-fetch": "^2.2.0", + "logkitty": "^0.4.0" } } diff --git a/packages/platform-android/src/commands/runAndroid/runAndroid.js b/packages/platform-android/src/commands/runAndroid/runAndroid.js index 71d2ef215..7a338060b 100644 --- a/packages/platform-android/src/commands/runAndroid/runAndroid.js +++ b/packages/platform-android/src/commands/runAndroid/runAndroid.js @@ -10,7 +10,6 @@ import path from 'path'; import {spawnSync, spawn, execFileSync} from 'child_process'; import fs from 'fs'; -import isString from 'lodash/isString'; import type {ConfigT} from '../../../../cli/src/tools/config/types.flow'; @@ -87,7 +86,7 @@ function buildAndRun(args) { const adbPath = getAdbPath(); if (args.deviceId) { - if (isString(args.deviceId)) { + if (typeof args.deviceId === 'string') { return runOnSpecificDevice( args, cmd, diff --git a/packages/platform-ios/package.json b/packages/platform-ios/package.json index 7c31f0d2b..9b9c12f21 100644 --- a/packages/platform-ios/package.json +++ b/packages/platform-ios/package.json @@ -3,6 +3,7 @@ "version": "2.0.0-alpha.5", "main": "build/index.js", "dependencies": { - "@react-native-community/cli-tools": "^2.0.0-alpha.5" + "@react-native-community/cli-tools": "^2.0.0-alpha.5", + "chalk": "^1.1.1" } } From 8590f61247dbc386c9337b7c556a9247a1f0a2a1 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 10:36:10 +0200 Subject: [PATCH 04/11] Move files around --- .flowconfig | 1 + packages/cli/src/commands/link/link.js | 7 ++-- packages/cli/src/commands/link/linkAll.js | 3 +- packages/cli/src/commands/link/unlink.js | 9 +++--- packages/cli/src/tools/{ => config}/errors.js | 28 ++-------------- .../src/tools/config/readConfigFromDisk.js | 2 +- .../tools/config/resolveReactNativePath.js | 4 +-- .../platform-android/src/commands/index.js | 4 +-- .../logAndroid/{logAndroid.js => index.js} | 0 .../runAndroid/{runAndroid.js => index.js} | 0 packages/platform-ios/src/commands/index.js | 4 +-- .../commands/logIOS/{logIOS.js => index.js} | 0 .../commands/runIOS/{runIOS.js => index.js} | 32 ++++++++----------- packages/tools/package.json | 1 + packages/tools/src/errors.js | 25 +++++++++++++++ packages/tools/src/index.js | 2 ++ 16 files changed, 62 insertions(+), 60 deletions(-) rename packages/cli/src/tools/{ => config}/errors.js (68%) rename packages/platform-android/src/commands/logAndroid/{logAndroid.js => index.js} (100%) rename packages/platform-android/src/commands/runAndroid/{runAndroid.js => index.js} (100%) rename packages/platform-ios/src/commands/logIOS/{logIOS.js => index.js} (100%) rename packages/platform-ios/src/commands/runIOS/{runIOS.js => index.js} (94%) create mode 100644 packages/tools/src/errors.js diff --git a/.flowconfig b/.flowconfig index 87fb9288f..90bdd9049 100644 --- a/.flowconfig +++ b/.flowconfig @@ -23,6 +23,7 @@ flow-typed [options] emoji=true +esproposal.export_star_as=enable esproposal.optional_chaining=enable esproposal.nullish_coalescing=enable module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' diff --git a/packages/cli/src/commands/link/link.js b/packages/cli/src/commands/link/link.js index 2be0d3f72..60b254629 100644 --- a/packages/cli/src/commands/link/link.js +++ b/packages/cli/src/commands/link/link.js @@ -8,14 +8,11 @@ */ import {pick} from 'lodash'; -import dedent from 'dedent'; import {type ConfigT} from '../../tools/config/types.flow'; -import {CLIError} from '../../tools/errors'; - import promiseWaterfall from './promiseWaterfall'; -import {logger} from '@react-native-community/cli-tools'; +import {logger, CLIError} from '@react-native-community/cli-tools'; import commandStub from './commandStub'; import promisify from './promisify'; import getPlatformName from './getPlatformName'; @@ -61,7 +58,7 @@ function link([rawPackageName]: Array, ctx: ConfigT, opts: FlagsType) { const packageName = rawPackageName.replace(/^(.+?)(@.+?)$/gi, '$1'); if (!Object.keys(ctx.dependencies).includes(packageName)) { - throw new CLIError(dedent` + throw new CLIError(` Unknown dependency. Make sure that the package you are trying to link is already installed in your "node_modules" and present in your "package.json" dependencies. `); diff --git a/packages/cli/src/commands/link/linkAll.js b/packages/cli/src/commands/link/linkAll.js index bd9f80a80..117b57529 100644 --- a/packages/cli/src/commands/link/linkAll.js +++ b/packages/cli/src/commands/link/linkAll.js @@ -6,7 +6,6 @@ import {uniqBy, flatMap} from 'lodash'; import path from 'path'; import type {ConfigT, PlatformsT} from '../../tools/config/types.flow'; -import {CLIError} from '../../tools/errors'; import promiseWaterfall from './promiseWaterfall'; import commandStub from './commandStub'; @@ -15,6 +14,8 @@ import promisify from './promisify'; import linkAssets from './linkAssets'; import linkDependency from './linkDependency'; +import {CLIError} from '@react-native-community/cli-tools'; + const dedupeAssets = (assets: Array): Array => uniqBy(assets, asset => path.basename(asset)); diff --git a/packages/cli/src/commands/link/unlink.js b/packages/cli/src/commands/link/unlink.js index 3bcf48758..108d3a504 100644 --- a/packages/cli/src/commands/link/unlink.js +++ b/packages/cli/src/commands/link/unlink.js @@ -9,8 +9,7 @@ import {flatMap, values, difference} from 'lodash'; import type {ConfigT} from '../../tools/config/types.flow'; -import dedent from 'dedent'; -import {logger} from '@react-native-community/cli-tools'; +import {logger, CLIError} from '@react-native-community/cli-tools'; import promiseWaterfall from './promiseWaterfall'; import commandStub from './commandStub'; import promisify from './promisify'; @@ -83,7 +82,7 @@ function unlink(args: Array, ctx: ConfigT) { const {[packageName]: dependency, ...otherDependencies} = ctx.dependencies; if (!dependency) { - throw new Error(dedent` + throw new CLIError(` Failed to unlink "${packageName}". It appears that the project is not linked yet. `); } @@ -137,7 +136,9 @@ function unlink(args: Array, ctx: ConfigT) { }) .catch(err => { logger.error( - `It seems something went wrong while unlinking. Error:\n${err.message}`, + `It seems something went wrong while unlinking. CLIError:\n${ + err.message + }`, ); throw err; }); diff --git a/packages/cli/src/tools/errors.js b/packages/cli/src/tools/config/errors.js similarity index 68% rename from packages/cli/src/tools/errors.js rename to packages/cli/src/tools/config/errors.js index 6cc864e55..3b1fbbc55 100644 --- a/packages/cli/src/tools/errors.js +++ b/packages/cli/src/tools/config/errors.js @@ -1,29 +1,7 @@ /** * @flow */ -import chalk from 'chalk'; -import dedent from 'dedent'; - -/** - * CLIError - * - * Features: - * - uses original stack trace when error object is passed - * - makes an inline string to match current styling inside CLI - */ -export class CLIError extends Error { - constructor(msg: string, error?: Error) { - super(msg.replace(/(\r\n|\n|\r)/gm, ' ')); - if (error) { - this.stack = error.stack - .split('\n') - .slice(0, 2) - .join('\n'); - } else { - Error.captureStackTrace(this, CLIError); - } - } -} +import {CLIError} from '@react-native-community/cli-tools'; type JoiErrorDetails = { message: string, @@ -54,7 +32,7 @@ export class JoiError extends CLIError { switch (error.type) { case 'object.allowUnknown': { const value = JSON.stringify(error.context.value); - return dedent` + return ` Unknown option ${name} with value "${value}" was found. This is either a typing error or a user mistake. Fixing it will remove this message. `; @@ -63,7 +41,7 @@ export class JoiError extends CLIError { case 'string.base': { const expectedType = error.type.replace('.base', ''); const actualType = typeof error.context.value; - return dedent` + return ` Option ${name} must be a ${expectedType}, instead got ${actualType} `; } diff --git a/packages/cli/src/tools/config/readConfigFromDisk.js b/packages/cli/src/tools/config/readConfigFromDisk.js index fda58d138..c4723afdf 100644 --- a/packages/cli/src/tools/config/readConfigFromDisk.js +++ b/packages/cli/src/tools/config/readConfigFromDisk.js @@ -13,7 +13,7 @@ import { type CommandT, } from './types.flow'; -import {JoiError} from '../errors'; +import {JoiError} from './errors'; import * as schema from './schema'; diff --git a/packages/cli/src/tools/config/resolveReactNativePath.js b/packages/cli/src/tools/config/resolveReactNativePath.js index bf1facd66..d814c2a6e 100644 --- a/packages/cli/src/tools/config/resolveReactNativePath.js +++ b/packages/cli/src/tools/config/resolveReactNativePath.js @@ -2,7 +2,7 @@ * @flow */ import path from 'path'; -import dedent from 'dedent'; +import {CLIError} from '@react-native-community/cli-tools'; /** * Finds path to React Native inside `node_modules` or throws @@ -17,7 +17,7 @@ export default function resolveReactNativePath(root: string) { }), ); } catch (_ignored) { - throw new Error(dedent` + throw new CLIError(` Unable to find React Native files. Make sure "react-native" module is installed in your project dependencies. diff --git a/packages/platform-android/src/commands/index.js b/packages/platform-android/src/commands/index.js index 572c30950..01ef421d5 100644 --- a/packages/platform-android/src/commands/index.js +++ b/packages/platform-android/src/commands/index.js @@ -1,7 +1,7 @@ /** * @flow */ -import logAndroid from './logAndroid/logAndroid'; -import runAndroid from './runAndroid/runAndroid'; +import logAndroid from './logAndroid'; +import runAndroid from './runAndroid'; export default [logAndroid, runAndroid]; diff --git a/packages/platform-android/src/commands/logAndroid/logAndroid.js b/packages/platform-android/src/commands/logAndroid/index.js similarity index 100% rename from packages/platform-android/src/commands/logAndroid/logAndroid.js rename to packages/platform-android/src/commands/logAndroid/index.js diff --git a/packages/platform-android/src/commands/runAndroid/runAndroid.js b/packages/platform-android/src/commands/runAndroid/index.js similarity index 100% rename from packages/platform-android/src/commands/runAndroid/runAndroid.js rename to packages/platform-android/src/commands/runAndroid/index.js diff --git a/packages/platform-ios/src/commands/index.js b/packages/platform-ios/src/commands/index.js index 05fb52583..dc8a7abab 100644 --- a/packages/platform-ios/src/commands/index.js +++ b/packages/platform-ios/src/commands/index.js @@ -1,7 +1,7 @@ /** * @flow */ -import logIOS from './logIOS/logIOS'; -import runIOS from './runIOS/runIOS'; +import logIOS from './logIOS'; +import runIOS from './runIOS'; export default [logIOS, runIOS]; diff --git a/packages/platform-ios/src/commands/logIOS/logIOS.js b/packages/platform-ios/src/commands/logIOS/index.js similarity index 100% rename from packages/platform-ios/src/commands/logIOS/logIOS.js rename to packages/platform-ios/src/commands/logIOS/index.js diff --git a/packages/platform-ios/src/commands/runIOS/runIOS.js b/packages/platform-ios/src/commands/runIOS/index.js similarity index 94% rename from packages/platform-ios/src/commands/runIOS/runIOS.js rename to packages/platform-ios/src/commands/runIOS/index.js index 6bb392ca2..bf6ca32d1 100644 --- a/packages/platform-ios/src/commands/runIOS/runIOS.js +++ b/packages/platform-ios/src/commands/runIOS/index.js @@ -18,7 +18,7 @@ import type {ConfigT} from '../../../../cli/src/tools/config/types.flow'; import findXcodeProject from './findXcodeProject'; import parseIOSDevicesList from './parseIOSDevicesList'; import findMatchingSimulator from './findMatchingSimulator'; -import {logger} from '@react-native-community/cli-tools'; +import {logger, CLIError} from '@react-native-community/cli-tools'; type FlagsT = { simulator: string, @@ -34,7 +34,7 @@ type FlagsT = { function runIOS(_: Array, ctx: ConfigT, args: FlagsT) { if (!fs.existsSync(args.projectPath)) { - throw new Error( + throw new CLIError( 'iOS project folder not found. Are you sure this is a React Native project?', ); } @@ -43,7 +43,7 @@ function runIOS(_: Array, ctx: ConfigT, args: FlagsT) { const xcodeProject = findXcodeProject(fs.readdirSync('.')); if (!xcodeProject) { - throw new Error( + throw new CLIError( `Could not find Xcode project files in "${args.projectPath}" folder`, ); } @@ -137,12 +137,12 @@ async function runOnSimulator(xcodeProject, args, scheme) { ), ); } catch (e) { - throw new Error('Could not parse the simulator list output'); + throw new CLIError('Could not parse the simulator list output'); } const selectedSimulator = findMatchingSimulator(simulators, args.simulator); if (!selectedSimulator) { - throw new Error(`Could not find ${args.simulator} simulator`); + throw new CLIError(`Could not find ${args.simulator} simulator`); } /** @@ -313,19 +313,15 @@ function buildProject( } if (code !== 0) { reject( - new Error( - chalk.red( - [ - 'Failed to build iOS project.', - `We ran "xcodebuild" command but it exited with error code ${code}.`, - `To debug build logs further, consider building your app with Xcode.app, by opening ${ - xcodeProject.name - }`, - ].join(' '), - ) + - '\n\n' + - chalk.gray(errorOutput), - ), + new CLIError(` + Failed to build iOS project. + + We ran "xcodebuild" command but it exited with error code ${code}. To debug build + logs further, consider building your app with Xcode.app, by opening + ${xcodeProject.name} + + ${chalk.gray(errorOutput)} + `), ); return; } diff --git a/packages/tools/package.json b/packages/tools/package.json index 5ef084e73..9d2e652c0 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -4,6 +4,7 @@ "main": "build/index.js", "dependencies": { "chalk": "^1.1.1", + "dedent": "^0.7.0", "lodash": "^4.17.5", "mime": "^1.3.4" } diff --git a/packages/tools/src/errors.js b/packages/tools/src/errors.js new file mode 100644 index 000000000..1f2aac139 --- /dev/null +++ b/packages/tools/src/errors.js @@ -0,0 +1,25 @@ +/** + * @flow + */ +import dedent from 'dedent'; + +/** + * CLIError + * + * Features: + * - uses original stack trace when error object is passed + * - makes an inline string to match current styling inside CLI + */ +export class CLIError extends Error { + constructor(msg: string, error?: Error) { + super(dedent(msg).replace(/(\r\n|\n|\r)/gm, ' ')); + if (error) { + this.stack = error.stack + .split('\n') + .slice(0, 2) + .join('\n'); + } else { + Error.captureStackTrace(this, CLIError); + } + } +} diff --git a/packages/tools/src/index.js b/packages/tools/src/index.js index 8568bba7e..d35508f2d 100644 --- a/packages/tools/src/index.js +++ b/packages/tools/src/index.js @@ -3,3 +3,5 @@ */ export {default as logger} from './logger'; export {default as groupFilesByType} from './groupFilesByType'; + +export * from './errors'; From dde6e9bdcbd29d52507162ddbeecdf5257b1b5b6 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 11:16:05 +0200 Subject: [PATCH 05/11] Simplify regex --- .../platform-ios/src/commands/runIOS/index.js | 11 ++++++----- packages/tools/package.json | 1 - packages/tools/src/errors.js | 18 ++++++++++-------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/platform-ios/src/commands/runIOS/index.js b/packages/platform-ios/src/commands/runIOS/index.js index bf6ca32d1..2148fc18b 100644 --- a/packages/platform-ios/src/commands/runIOS/index.js +++ b/packages/platform-ios/src/commands/runIOS/index.js @@ -313,15 +313,16 @@ function buildProject( } if (code !== 0) { reject( - new CLIError(` + new CLIError( + ` Failed to build iOS project. We ran "xcodebuild" command but it exited with error code ${code}. To debug build logs further, consider building your app with Xcode.app, by opening - ${xcodeProject.name} - - ${chalk.gray(errorOutput)} - `), + ${xcodeProject.name}. + `, + errorOutput, + ), ); return; } diff --git a/packages/tools/package.json b/packages/tools/package.json index 9d2e652c0..5ef084e73 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -4,7 +4,6 @@ "main": "build/index.js", "dependencies": { "chalk": "^1.1.1", - "dedent": "^0.7.0", "lodash": "^4.17.5", "mime": "^1.3.4" } diff --git a/packages/tools/src/errors.js b/packages/tools/src/errors.js index 1f2aac139..33e9baac3 100644 --- a/packages/tools/src/errors.js +++ b/packages/tools/src/errors.js @@ -1,7 +1,6 @@ /** * @flow */ -import dedent from 'dedent'; /** * CLIError @@ -11,13 +10,16 @@ import dedent from 'dedent'; * - makes an inline string to match current styling inside CLI */ export class CLIError extends Error { - constructor(msg: string, error?: Error) { - super(dedent(msg).replace(/(\r\n|\n|\r)/gm, ' ')); - if (error) { - this.stack = error.stack - .split('\n') - .slice(0, 2) - .join('\n'); + constructor(msg: string, originError?: Error | message) { + super(msg.replace(/(\s{2,})/gm, ' ').trim()); + if (originError) { + this.stack = + typeof originError === 'string' + ? originError + : originError.stack + .split('\n') + .slice(0, 2) + .join('\n'); } else { Error.captureStackTrace(this, CLIError); } From 80331cdbdd538987d4462ff8bc81f827a794b577 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 11:21:24 +0200 Subject: [PATCH 06/11] Remove unused type --- packages/cli/src/commands/link/linkAll.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/link/linkAll.js b/packages/cli/src/commands/link/linkAll.js index 117b57529..576a98531 100644 --- a/packages/cli/src/commands/link/linkAll.js +++ b/packages/cli/src/commands/link/linkAll.js @@ -5,7 +5,7 @@ import {uniqBy, flatMap} from 'lodash'; import path from 'path'; -import type {ConfigT, PlatformsT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../tools/config/types.flow'; import promiseWaterfall from './promiseWaterfall'; import commandStub from './commandStub'; From 68a6bb9c94d0980e0d84fb22b27cfad83dd3916f Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 11:27:02 +0200 Subject: [PATCH 07/11] Move packages around --- package.json | 1 + packages/cli/package.json | 9 +-------- packages/platform-android/package.json | 4 +++- packages/platform-ios/package.json | 3 ++- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 308f6ed51..52f32e509 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "glob": "^7.1.3", "jest": "^24.6.0", "lerna": "^3.13.1", + "metro-memory-fs": "^0.53.1", "micromatch": "^3.1.10", "mkdirp": "^0.5.1", "string-length": "^2.0.0" diff --git a/packages/cli/package.json b/packages/cli/package.json index 287ce1f58..e3217240c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -28,10 +28,8 @@ "connect": "^3.6.5", "cosmiconfig": "^5.1.0", "deepmerge": "^3.2.0", - "denodeify": "^1.2.1", "envinfo": "^7.1.0", "errorhandler": "^1.5.0", - "escape-string-regexp": "^1.0.5", "execa": "^1.0.0", "fs-extra": "^7.0.1", "glob": "^7.1.1", @@ -42,9 +40,7 @@ "metro": "^0.53.1", "metro-config": "^0.53.1", "metro-core": "^0.53.1", - "metro-memory-fs": "^0.53.1", "metro-react-native-babel-transformer": "^0.53.1", - "mime": "^1.3.4", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "morgan": "^1.9.0", @@ -56,10 +52,7 @@ "semver": "^5.0.3", "serve-static": "^1.13.1", "shell-quote": "1.6.1", - "slash": "^2.0.0", - "ws": "^1.1.0", - "xcode": "^2.0.0", - "xmldoc": "^0.4.0" + "ws": "^1.1.0" }, "peerDependencies": { "react-native": "^0.60.0" diff --git a/packages/platform-android/package.json b/packages/platform-android/package.json index 03b2a1cd2..f964633ff 100644 --- a/packages/platform-android/package.json +++ b/packages/platform-android/package.json @@ -5,6 +5,8 @@ "dependencies": { "@react-native-community/cli-tools": "^2.0.0-alpha.5", "node-fetch": "^2.2.0", - "logkitty": "^0.4.0" + "logkitty": "^0.4.0", + "slash": "^2.0.0", + "xmldoc": "^0.4.0" } } diff --git a/packages/platform-ios/package.json b/packages/platform-ios/package.json index 9b9c12f21..8cfa37b8f 100644 --- a/packages/platform-ios/package.json +++ b/packages/platform-ios/package.json @@ -4,6 +4,7 @@ "main": "build/index.js", "dependencies": { "@react-native-community/cli-tools": "^2.0.0-alpha.5", - "chalk": "^1.1.1" + "chalk": "^1.1.1", + "xcode": "^2.0.0" } } From 0a499773c4c44fa1aa52bc5085d726ca17fc069e Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 11:28:09 +0200 Subject: [PATCH 08/11] Fix type --- packages/tools/src/errors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tools/src/errors.js b/packages/tools/src/errors.js index 33e9baac3..0fdfbe82e 100644 --- a/packages/tools/src/errors.js +++ b/packages/tools/src/errors.js @@ -10,7 +10,7 @@ * - makes an inline string to match current styling inside CLI */ export class CLIError extends Error { - constructor(msg: string, originError?: Error | message) { + constructor(msg: string, originError?: Error | string) { super(msg.replace(/(\s{2,})/gm, ' ').trim()); if (originError) { this.stack = From 8c0fc329b0fa8590a68eb2596ef61318623afdd0 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 11:51:15 +0200 Subject: [PATCH 09/11] Update snapshot --- .../__snapshots__/index-test.js.snap | 83 +++++++------------ .../src/tools/config/__tests__/index-test.js | 6 +- .../platform-ios/src/commands/runIOS/index.js | 1 - 3 files changed, 34 insertions(+), 56 deletions(-) diff --git a/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap b/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap index 27ab9e567..2934e8dd7 100644 --- a/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap +++ b/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap @@ -57,64 +57,41 @@ Array [ ] `; -exports[`should merge project configuration with default values 1`] = ` +exports[`should merge project configuration with default values: snapshoting \`dependencies\` property of the project config 1`] = ` Object { - "assets": Array [], - "commands": Array [], - "dependencies": Object { - "react-native": Object { - "assets": Array [], - "hooks": Object {}, - "name": "react-native", - "params": Array [], - "platforms": Object { - "android": null, - "ios": null, - }, - }, - "react-native-test": Object { - "assets": Array [ - "foo", - ], - "hooks": Object {}, - "name": "react-native-test", - "params": Array [], - "platforms": Object { - "android": null, - "ios": Object { - "folder": "<>/node_modules/react-native-test", - "libraryFolder": "Libraries", - "pbxprojPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj/project.pbxproj", - "plist": Array [], - "podfile": null, - "podspec": null, - "projectName": "HelloWorld.xcodeproj", - "projectPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj", - "sharedLibraries": Array [], - "sourceDir": "./abc", - }, - }, + "react-native": Object { + "assets": Array [], + "hooks": Object {}, + "name": "react-native", + "params": Array [], + "platforms": Object { + "android": null, + "ios": null, }, }, - "haste": Object { - "platforms": Array [ - "ios", - "android", - ], - "providesModuleNodeModules": Array [ - "react-native", + "react-native-test": Object { + "assets": Array [ + "foo", ], + "hooks": Object {}, + "name": "react-native-test", + "params": Array [], + "platforms": Object { + "android": null, + "ios": Object { + "folder": "<>/node_modules/react-native-test", + "libraryFolder": "Libraries", + "pbxprojPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj/project.pbxproj", + "plist": Array [], + "podfile": null, + "podspec": null, + "projectName": "HelloWorld.xcodeproj", + "projectPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj", + "sharedLibraries": Array [], + "sourceDir": "./abc", + }, + }, }, - "platforms": Object { - "android": Object {}, - "ios": Object {}, - }, - "project": Object { - "android": null, - "ios": null, - }, - "reactNativePath": "<>", - "root": "<>", } `; diff --git a/packages/cli/src/tools/config/__tests__/index-test.js b/packages/cli/src/tools/config/__tests__/index-test.js index bb917ce9c..d2c2c8769 100644 --- a/packages/cli/src/tools/config/__tests__/index-test.js +++ b/packages/cli/src/tools/config/__tests__/index-test.js @@ -113,8 +113,10 @@ test('should merge project configuration with default values', () => { } }`, }); - const config = loadConfig(DIR); - expect(removeString(config, DIR)).toMatchSnapshot(); + const {dependencies} = loadConfig(DIR); + expect(removeString(dependencies, DIR)).toMatchSnapshot( + 'snapshoting `dependencies` property of the project config', + ); }); test('should read `rnpm` config from a dependency and transform it to a new format', () => { diff --git a/packages/platform-ios/src/commands/runIOS/index.js b/packages/platform-ios/src/commands/runIOS/index.js index 2148fc18b..d5c8f2a5e 100644 --- a/packages/platform-ios/src/commands/runIOS/index.js +++ b/packages/platform-ios/src/commands/runIOS/index.js @@ -9,7 +9,6 @@ */ import child_process from 'child_process'; -import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; From 35a3875d68172e9a4605ab0d3911ccb647e4e5f5 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 11:52:19 +0200 Subject: [PATCH 10/11] Make snapshot even smaller --- .../__snapshots__/index-test.js.snap | 52 +++++++------------ .../src/tools/config/__tests__/index-test.js | 4 +- 2 files changed, 22 insertions(+), 34 deletions(-) diff --git a/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap b/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap index 2934e8dd7..7479bcbbe 100644 --- a/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap +++ b/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap @@ -57,39 +57,27 @@ Array [ ] `; -exports[`should merge project configuration with default values: snapshoting \`dependencies\` property of the project config 1`] = ` +exports[`should merge project configuration with default values: snapshoting \`react-native-test\` config 1`] = ` Object { - "react-native": Object { - "assets": Array [], - "hooks": Object {}, - "name": "react-native", - "params": Array [], - "platforms": Object { - "android": null, - "ios": null, - }, - }, - "react-native-test": Object { - "assets": Array [ - "foo", - ], - "hooks": Object {}, - "name": "react-native-test", - "params": Array [], - "platforms": Object { - "android": null, - "ios": Object { - "folder": "<>/node_modules/react-native-test", - "libraryFolder": "Libraries", - "pbxprojPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj/project.pbxproj", - "plist": Array [], - "podfile": null, - "podspec": null, - "projectName": "HelloWorld.xcodeproj", - "projectPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj", - "sharedLibraries": Array [], - "sourceDir": "./abc", - }, + "assets": Array [ + "foo", + ], + "hooks": Object {}, + "name": "react-native-test", + "params": Array [], + "platforms": Object { + "android": null, + "ios": Object { + "folder": "<>/node_modules/react-native-test", + "libraryFolder": "Libraries", + "pbxprojPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj/project.pbxproj", + "plist": Array [], + "podfile": null, + "podspec": null, + "projectName": "HelloWorld.xcodeproj", + "projectPath": "<>/node_modules/react-native-test/ios/HelloWorld.xcodeproj", + "sharedLibraries": Array [], + "sourceDir": "./abc", }, }, } diff --git a/packages/cli/src/tools/config/__tests__/index-test.js b/packages/cli/src/tools/config/__tests__/index-test.js index d2c2c8769..5ea4965f2 100644 --- a/packages/cli/src/tools/config/__tests__/index-test.js +++ b/packages/cli/src/tools/config/__tests__/index-test.js @@ -114,8 +114,8 @@ test('should merge project configuration with default values', () => { }`, }); const {dependencies} = loadConfig(DIR); - expect(removeString(dependencies, DIR)).toMatchSnapshot( - 'snapshoting `dependencies` property of the project config', + expect(removeString(dependencies['react-native-test'], DIR)).toMatchSnapshot( + 'snapshoting `react-native-test` config', ); }); From 466d8b9277d4b35b2b009c12512ac464c5a9130a Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Wed, 10 Apr 2019 14:20:17 +0200 Subject: [PATCH 11/11] Throw unlink error --- packages/cli/src/commands/link/unlink.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/commands/link/unlink.js b/packages/cli/src/commands/link/unlink.js index 108d3a504..e7991ac72 100644 --- a/packages/cli/src/commands/link/unlink.js +++ b/packages/cli/src/commands/link/unlink.js @@ -135,12 +135,10 @@ function unlink(args: Array, ctx: ConfigT) { ); }) .catch(err => { - logger.error( - `It seems something went wrong while unlinking. CLIError:\n${ - err.message - }`, + throw new CLIError( + `Something went wrong while unlinking. Reason ${err.message}`, + err, ); - throw err; }); }