From a4d0c9c003cac9db35923fa50b15437553e6e88b Mon Sep 17 00:00:00 2001 From: shmck Date: Wed, 19 Aug 2020 21:25:31 -0700 Subject: [PATCH] move error messages to client Signed-off-by: shmck --- errors/FailedToConnectToGitRepo.md | 7 ----- errors/GitNotFound.md | 3 --- errors/GitProjectAlreadyExists.md | 5 ---- errors/GitRemoteAlreadyExists.md | 5 ---- errors/MissingTutorialDependency.md | 3 --- errors/NoWorkspaceFound.md | 3 --- errors/UnknownError.md | 5 ---- errors/UnmetExtensionVersion.md | 3 --- errors/UnmetTutorialDependency.md | 3 --- errors/WorkspaceNotEmpty.md | 5 ---- src/actions/index.ts | 1 - src/actions/onErrorPage.ts | 26 ------------------- src/commands.ts | 3 --- web-app/src/services/errors/en.json | 12 +++++++++ web-app/src/services/state/actions/context.ts | 21 +++++++++++++-- 15 files changed, 31 insertions(+), 74 deletions(-) delete mode 100644 errors/FailedToConnectToGitRepo.md delete mode 100644 errors/GitNotFound.md delete mode 100644 errors/GitProjectAlreadyExists.md delete mode 100644 errors/GitRemoteAlreadyExists.md delete mode 100644 errors/MissingTutorialDependency.md delete mode 100644 errors/NoWorkspaceFound.md delete mode 100644 errors/UnknownError.md delete mode 100644 errors/UnmetExtensionVersion.md delete mode 100644 errors/UnmetTutorialDependency.md delete mode 100644 errors/WorkspaceNotEmpty.md delete mode 100644 src/actions/onErrorPage.ts create mode 100644 web-app/src/services/errors/en.json diff --git a/errors/FailedToConnectToGitRepo.md b/errors/FailedToConnectToGitRepo.md deleted file mode 100644 index fef26ef2..00000000 --- a/errors/FailedToConnectToGitRepo.md +++ /dev/null @@ -1,7 +0,0 @@ -### Failed to Connect to Git Repo - -There are several possible causes: - -- you may not be connected to the internet or have an unstable connection. -- you may not have access permission to the remote tutorial repo. -- the remote tutorial repo may not exist at the provided location diff --git a/errors/GitNotFound.md b/errors/GitNotFound.md deleted file mode 100644 index a0b24e52..00000000 --- a/errors/GitNotFound.md +++ /dev/null @@ -1,3 +0,0 @@ -### Git Not Found - -Make sure you install Git. See the [Git docs](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) for help. diff --git a/errors/GitProjectAlreadyExists.md b/errors/GitProjectAlreadyExists.md deleted file mode 100644 index f06258d4..00000000 --- a/errors/GitProjectAlreadyExists.md +++ /dev/null @@ -1,5 +0,0 @@ -### Git Remote Already Exists - -Have you started this tutorial before in this workspace? The Git remote already exists. - -Consider deleting your `.git` folder and restarting. diff --git a/errors/GitRemoteAlreadyExists.md b/errors/GitRemoteAlreadyExists.md deleted file mode 100644 index f2e31560..00000000 --- a/errors/GitRemoteAlreadyExists.md +++ /dev/null @@ -1,5 +0,0 @@ -### Git Project Already Exists - -CodeRoad requires an empty Git project. - -Open a new workspace to start a tutorial. diff --git a/errors/MissingTutorialDependency.md b/errors/MissingTutorialDependency.md deleted file mode 100644 index 7e989371..00000000 --- a/errors/MissingTutorialDependency.md +++ /dev/null @@ -1,3 +0,0 @@ -### Missing Tutorial Dependency - -The tutorial cannot run because it a dependency is not yet installed. Install the dependency and click "Check Again". diff --git a/errors/NoWorkspaceFound.md b/errors/NoWorkspaceFound.md deleted file mode 100644 index 547e6bbf..00000000 --- a/errors/NoWorkspaceFound.md +++ /dev/null @@ -1,3 +0,0 @@ -### Open a Workspace Folder - -CodeRoad requires a workspace folder to run. Open a new workspace and re-launch CodeRoad. diff --git a/errors/UnknownError.md b/errors/UnknownError.md deleted file mode 100644 index d64fe8d4..00000000 --- a/errors/UnknownError.md +++ /dev/null @@ -1,5 +0,0 @@ -### Unknown Error - -Sorry! An unknown error occurred. - -Please help out by posting an issue at github.com/coderoad/coderoad-vscode/issues/new/choose! diff --git a/errors/UnmetExtensionVersion.md b/errors/UnmetExtensionVersion.md deleted file mode 100644 index 688d4d42..00000000 --- a/errors/UnmetExtensionVersion.md +++ /dev/null @@ -1,3 +0,0 @@ -### Unmet Tutorial Dependency - -This tutorial requires a different version of CodeRoad. diff --git a/errors/UnmetTutorialDependency.md b/errors/UnmetTutorialDependency.md deleted file mode 100644 index 9803ae4d..00000000 --- a/errors/UnmetTutorialDependency.md +++ /dev/null @@ -1,3 +0,0 @@ -### Unmet Tutorial Dependency - -Tutorial cannot reun because a dependency version doesn't match. Install the correct dependency and click "Check Again". diff --git a/errors/WorkspaceNotEmpty.md b/errors/WorkspaceNotEmpty.md deleted file mode 100644 index f6d7f2f5..00000000 --- a/errors/WorkspaceNotEmpty.md +++ /dev/null @@ -1,5 +0,0 @@ -### Select An Empty VSCode Workspace - -Start a project in an empty folder. - -Once selected, the extension will close and need to be re-started. diff --git a/src/actions/index.ts b/src/actions/index.ts index add7a608..4b86feda 100644 --- a/src/actions/index.ts +++ b/src/actions/index.ts @@ -3,6 +3,5 @@ export { default as onTutorialConfigNew } from './onTutorialConfigNew' export { default as onTutorialConfigContinue } from './onTutorialConfigContinue' export { default as onValidateSetup } from './onValidateSetup' export { default as onRunReset } from './onRunReset' -export { default as onErrorPage } from './onErrorPage' export { runTest } from './onTest' export { onOpenLogs } from './onOpenLogs' diff --git a/src/actions/onErrorPage.ts b/src/actions/onErrorPage.ts deleted file mode 100644 index 8b241f7a..00000000 --- a/src/actions/onErrorPage.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as T from 'typings' -import { readFile } from '../services/node' -import logger from '../services/logger' - -const onErrorPage = async (action: T.Action): Promise => { - // Error middleware - if (action?.payload?.error?.type) { - // load error markdown message - const error = action.payload.error - const errorMarkdown = await readFile(__dirname, '..', '..', 'errors', `${action.payload.error.type}.md`).catch( - () => { - // onError(new Error(`Error Markdown file not found for ${action.type}`)) - }, - ) - - // log error to console for safe keeping - logger(`ERROR:\n ${errorMarkdown}`) - - if (errorMarkdown) { - // add a clearer error message for the user - error.message = `${errorMarkdown}\n\n${error.message}` - } - } -} - -export default onErrorPage diff --git a/src/commands.ts b/src/commands.ts index bffc21d8..c7f4fc4d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -28,9 +28,6 @@ let sendToClient = (action: T.Action): void => { // This makes it easier to pass the send // function throughout the codebase export const send = (action: T.Action): void => { - // load error page if error action is triggered - actions.onErrorPage(action) - logger(`EXT TO CLIENT: "${typeof action === 'string' ? action : action.type}"`) if (action) sendToClient(action) diff --git a/web-app/src/services/errors/en.json b/web-app/src/services/errors/en.json new file mode 100644 index 00000000..17336818 --- /dev/null +++ b/web-app/src/services/errors/en.json @@ -0,0 +1,12 @@ +{ + "FailedToConnectToGitRepo": "### Failed to Connect to Git Repo\n\nThere are several possible causes:\n\n- you may not be connected to the internet or have an unstable connection.\n- you may not have access permission to the remote tutorial repo.\n- the remote tutorial repo may not exist at the provided location", + "GitNotFound": "### Git Not Found\n\nMake sure you have Git installed.\n\nSee the [Git docs](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) for help.", + "GitProjectAlreadyExists": "### Git Remote Already Exists\n\nHave you started this tutorial before in this workspace? The Git remote already exists.\n\nConsider deleting your `.git` folder and restarting.", + "GitRemoteAlreadyExists": "### Git Project Already Exists\n\nCodeRoad requires an empty Git project.\n\nOpen a new workspace to start a tutorial.", + "MissingTutorialDependency": "### Missing Tutorial Dependency\n\nThe tutorial cannot run because it a dependency is not yet installed. Install the dependency and click \"Check Again\".", + "NoWorkspaceFound": "### Open a Workspace Folder\n\nCodeRoad requires a workspace folder to run. Open a new workspace and re-launch CodeRoad.", + "UnknownError": "### Unknown Error\n\nSorry! An unknown error occurred.\n\nPlease help out by posting an issue at github.com/coderoad/coderoad-vscode/issues/new/choose!", + "UnmetExtensionVersion": "### Unmet Extension Version\n\nVSCode extension version is below requirements. Update VSCode to use CodeRoad.", + "UnmetTutorialDependency": "### Unmet Tutorial Dependency\n\nTutorial cannot run because a dependency version doesn't match. Install the correct dependency and click \"Check Again\".", + "WorkspaceNotEmpty": "### Select An Empty VSCode Workspace\n\nStart a project in an empty folder.\n\nOnce selected, the extension will close and need to be re-started." +} diff --git a/web-app/src/services/state/actions/context.ts b/web-app/src/services/state/actions/context.ts index 99da6d3f..cbdf8f4a 100644 --- a/web-app/src/services/state/actions/context.ts +++ b/web-app/src/services/state/actions/context.ts @@ -1,10 +1,12 @@ import * as T from 'typings' import * as TT from 'typings/tutorial' +import * as E from 'typings/error' import { assign, send } from 'xstate' import * as selectors from '../../selectors' import getStepNext from './utils/stepNext' import getNext from './utils/getNext' import logger from 'services/logger' +import errors from '../../errors/en.json' export const setStart = assign({ env: (context: T.MachineContext, event: T.MachineEvent) => { @@ -73,8 +75,23 @@ export const reset = assign({ export const setError = assign({ error: (context: T.MachineContext, event: T.MachineEvent): any => { - const message: string | null = event.payload.error - return message + const error: string | null | E.ErrorMessage = event.payload.error + if (error) { + if (typeof error === 'string') { + console.log(`ERROR: ${error}`) + return error + } else if (error.type) { + const errorMessage = errors[error.type] + const content = errorMessage || '' + const message = `${content}\n\n${error.message || ''}` + console.log(`ERROR: ${message}`) + return { + ...error, + message, + } + } + } + return null }, })