diff --git a/packages/apollo/src/commands/client/check.ts b/packages/apollo/src/commands/client/check.ts index 26cb848406..39aa7d0904 100644 --- a/packages/apollo/src/commands/client/check.ts +++ b/packages/apollo/src/commands/client/check.ts @@ -8,6 +8,7 @@ import { relative } from "path"; import { graphqlTypes } from "apollo-language-server"; import chalk from "chalk"; import envCi from "env-ci"; +import { graphUndefinedError } from "../../utils/errors"; const { ValidationErrorType } = graphqlTypes; type ValidationResult = graphqlTypes.ValidateOperations_service_validateOperations_validationResults; @@ -41,9 +42,7 @@ export default class ClientCheck extends ClientCommand { title: "Checking client compatibility with service", task: async ctx => { if (!config.name) { - throw new Error( - "No service found to link to Apollo Graph Manager. Graph Manager is required for this command." - ); + throw graphUndefinedError; } ctx.gitContext = await gitInfo(this.log); diff --git a/packages/apollo/src/commands/client/push.ts b/packages/apollo/src/commands/client/push.ts index 10b62aeca7..ecefb74fbd 100644 --- a/packages/apollo/src/commands/client/push.ts +++ b/packages/apollo/src/commands/client/push.ts @@ -14,6 +14,7 @@ import { ApolloConfig, graphqlTypes } from "apollo-language-server"; +import { graphUndefinedError } from "../../utils/errors"; export default class ClientPush extends ClientCommand { static description = @@ -60,9 +61,7 @@ export default class ClientPush extends ClientCommand { title: "Pushing operations to operation registry", task: async (_, task) => { if (!config.name) { - throw new Error( - "No service found to link to Apollo Graph Manager. Graph Manager is required for this command." - ); + throw graphUndefinedError; } const operationManifest = getOperationManifestFromProject( diff --git a/packages/apollo/src/commands/service/check.ts b/packages/apollo/src/commands/service/check.ts index d0ba8c98d4..1cce2b6e9a 100644 --- a/packages/apollo/src/commands/service/check.ts +++ b/packages/apollo/src/commands/service/check.ts @@ -22,6 +22,7 @@ import { ApolloConfig, isServiceProject } from "apollo-language-server"; import moment from "moment"; import sortBy from "lodash.sortby"; import { isNotNullOrUndefined } from "apollo-env"; +import { graphUndefinedError } from "../../utils/errors"; const formatChange = (change: Change) => { let color = (x: string): string => x; @@ -304,7 +305,7 @@ export default class ServiceCheck extends ProjectCommand { const serviceName: string | undefined = flags.serviceName; if (!graphID) { - throw new Error("No service found to link to Apollo Graph Manager"); + throw graphUndefinedError; } // Add some fields to output that are required for producing diff --git a/packages/apollo/src/commands/service/delete.ts b/packages/apollo/src/commands/service/delete.ts index dfda80f833..a25059c22a 100644 --- a/packages/apollo/src/commands/service/delete.ts +++ b/packages/apollo/src/commands/service/delete.ts @@ -2,6 +2,7 @@ import cli from "cli-ux"; import { flags } from "@oclif/command"; import { ProjectCommand } from "../../Command"; +import { graphUndefinedError } from "../../utils/errors"; export default class ServiceDelete extends ProjectCommand { static description = @@ -52,7 +53,7 @@ export default class ServiceDelete extends ProjectCommand { title: "Removing service from Apollo Graph Manager", task: async () => { if (!config.name) { - throw new Error("No service found to link to Apollo Graph Manager"); + throw graphUndefinedError; } if (flags.federated) { diff --git a/packages/apollo/src/commands/service/list.ts b/packages/apollo/src/commands/service/list.ts index af4b3dd02e..4fb4d52d40 100644 --- a/packages/apollo/src/commands/service/list.ts +++ b/packages/apollo/src/commands/service/list.ts @@ -4,16 +4,13 @@ import { GraphQLSchema } from "graphql"; import sortBy from "lodash.sortby"; import { table } from "table"; import moment from "moment"; -import { - ApolloConfig, - isServiceProject, - DefaultEngineConfig -} from "apollo-language-server"; +import { ApolloConfig, DefaultEngineConfig } from "apollo-language-server"; import chalk from "chalk"; import { ListServices_service_implementingServices, ListServices_service_implementingServices_FederatedImplementingServices_services } from "apollo-language-server/lib/graphqlTypes"; +import { graphUndefinedError } from "../../utils/errors"; interface TasksOutput { config: ApolloConfig; @@ -114,7 +111,7 @@ export default class ServiceList extends ProjectCommand { graphVariant = flags.tag || config.tag || "current"; if (!graphID) { - throw new Error("No service found to link to Apollo Graph Manager"); + throw graphUndefinedError; } return [ diff --git a/packages/apollo/src/commands/service/push.ts b/packages/apollo/src/commands/service/push.ts index 276c5d8798..3ea5de806c 100644 --- a/packages/apollo/src/commands/service/push.ts +++ b/packages/apollo/src/commands/service/push.ts @@ -6,6 +6,7 @@ import { ProjectCommand } from "../../Command"; import { UploadSchemaVariables } from "apollo-language-server/lib/graphqlTypes"; import { GraphQLServiceProject } from "apollo-language-server"; import chalk from "chalk"; +import { graphUndefinedError } from "../../utils/errors"; export default class ServicePush extends ProjectCommand { static aliases = ["schema:publish"]; @@ -51,7 +52,7 @@ export default class ServicePush extends ProjectCommand { title: "Uploading service to Apollo Graph Manager", task: async () => { if (!config.name) { - throw new Error("No service found to link to Apollo Graph Manager"); + throw graphUndefinedError; } if (flags.federated) { diff --git a/packages/apollo/src/utils/errors.ts b/packages/apollo/src/utils/errors.ts new file mode 100644 index 0000000000..d11606a5e9 --- /dev/null +++ b/packages/apollo/src/utils/errors.ts @@ -0,0 +1,9 @@ +import { CLIError } from "@oclif/errors"; + +const errorMessage = [ + "No graph (i.e. service) found to link to Apollo Graph Manager.", + "In order to run this command, please provide a graph ID using the 'apollo.config.js' file.", + "\n\nFor more information on configuring the Apollo CLI, please go to", + "https://go.apollo.dev/t/config" +].join(" "); +export const graphUndefinedError = new CLIError(errorMessage);