From aa78c843124d5a997a4f183b58e7e42b01884198 Mon Sep 17 00:00:00 2001 From: Alex Danoff Date: Wed, 7 Jun 2017 10:29:21 -0700 Subject: [PATCH] Fix issue with `RelayCompilerUserError` Reviewed By: kassens Differential Revision: D5198312 fbshipit-source-id: e9086164c5648ef8870f426d0651986838e169e8 --- .../relay-compiler/codegen/RelayCodegenRunner.js | 3 +-- .../relay-compiler/core/RelayCompilerContext.js | 12 +++++++----- .../relay-compiler/core/RelayCompilerUserError.js | 14 ++++++++------ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/relay-compiler/codegen/RelayCodegenRunner.js b/packages/relay-compiler/codegen/RelayCodegenRunner.js index b7078ccace4a4..9185aa1161919 100644 --- a/packages/relay-compiler/codegen/RelayCodegenRunner.js +++ b/packages/relay-compiler/codegen/RelayCodegenRunner.js @@ -14,7 +14,6 @@ 'use strict'; const RelayCodegenWatcher = require('RelayCodegenWatcher'); -const RelayCompilerUserError = require('RelayCompilerUserError'); const invariant = require('invariant'); @@ -185,7 +184,7 @@ class RelayCodegenRunner { try { outputDirectories = await writer.writeAll(); } catch (e) { - if (e instanceof RelayCompilerUserError) { + if (e.isRelayUserError) { // TODO could use chalk here for red output console.log('Error: ' + e.message); } else { diff --git a/packages/relay-compiler/core/RelayCompilerContext.js b/packages/relay-compiler/core/RelayCompilerContext.js index 3a263d20fcfbc..7b239174ed647 100644 --- a/packages/relay-compiler/core/RelayCompilerContext.js +++ b/packages/relay-compiler/core/RelayCompilerContext.js @@ -13,11 +13,11 @@ 'use strict'; -const RelayCompilerUserError = require('RelayCompilerUserError'); - const immutable = require('immutable'); const invariant = require('invariant'); +const {createUserError} = require('RelayCompilerUserError'); + import type {Fragment, Root} from 'RelayIR'; import type {GraphQLSchema} from 'graphql'; @@ -108,9 +108,11 @@ class RelayCompilerContext { const node = record && record.get('node'); if (!(node && node.kind === 'Fragment')) { const childModule = name.substring(0, name.lastIndexOf('_')); - throw new RelayCompilerUserError( - `Relay cannot find fragment \`${name}\`.` + - ` Please make sure the fragment exists in \`${childModule}\``, + throw createUserError( + 'Relay cannot find fragment `%s`.' + + ' Please make sure the fragment exists in `%s`', + name, + childModule, ); } return node; diff --git a/packages/relay-compiler/core/RelayCompilerUserError.js b/packages/relay-compiler/core/RelayCompilerUserError.js index b809a1ab7a76c..2d9994f366894 100644 --- a/packages/relay-compiler/core/RelayCompilerUserError.js +++ b/packages/relay-compiler/core/RelayCompilerUserError.js @@ -13,10 +13,12 @@ 'use strict'; -class RelayCompilerUserError extends Error { - constructor(message: string) { - super(message); - } -} +const createUserError = (format: string, ...args: any): Error => { + let index = 0; + const formatted = format.replace(/%s/g, match => args[index++]); + const err = new Error(formatted); + (err: any).isRelayUserError = true; + return err; +}; -module.exports = RelayCompilerUserError; +module.exports = {createUserError};