UNPKG

7.26 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.hasPersistedQueryError = exports.formatApolloErrors = exports.UserInputError = exports.PersistedQueryNotSupportedError = exports.PersistedQueryNotFoundError = exports.ForbiddenError = exports.AuthenticationError = exports.ValidationError = exports.SyntaxError = exports.fromGraphQLError = exports.toApolloError = exports.ApolloError = void 0;
4const graphql_1 = require("graphql");
5class ApolloError extends Error {
6 constructor(message, code, extensions) {
7 super(message);
8 if (extensions) {
9 Object.keys(extensions)
10 .filter(keyName => keyName !== 'message' && keyName !== 'extensions')
11 .forEach(key => {
12 this[key] = extensions[key];
13 });
14 }
15 if (!this.name) {
16 Object.defineProperty(this, 'name', { value: 'ApolloError' });
17 }
18 const userProvidedExtensions = (extensions && extensions.extensions) || null;
19 this.extensions = Object.assign(Object.assign(Object.assign({}, extensions), userProvidedExtensions), { code });
20 }
21}
22exports.ApolloError = ApolloError;
23function enrichError(error, debug = false) {
24 const expanded = Object.create(Object.getPrototypeOf(error), {
25 name: {
26 value: error.name,
27 },
28 message: {
29 value: error.message,
30 enumerable: true,
31 writable: true,
32 },
33 locations: {
34 value: error.locations || undefined,
35 enumerable: true,
36 },
37 path: {
38 value: error.path || undefined,
39 enumerable: true,
40 },
41 nodes: {
42 value: error.nodes || undefined,
43 },
44 source: {
45 value: error.source || undefined,
46 },
47 positions: {
48 value: error.positions || undefined,
49 },
50 originalError: {
51 value: error.originalError,
52 },
53 });
54 expanded.extensions = Object.assign(Object.assign({}, error.extensions), { code: (error.extensions && error.extensions.code) || 'INTERNAL_SERVER_ERROR', exception: Object.assign(Object.assign({}, (error.extensions && error.extensions.exception)), error.originalError) });
55 delete expanded.extensions.exception.extensions;
56 if (debug && !expanded.extensions.exception.stacktrace) {
57 expanded.extensions.exception.stacktrace =
58 (error.originalError &&
59 error.originalError.stack &&
60 error.originalError.stack.split('\n')) ||
61 (error.stack && error.stack.split('\n'));
62 }
63 if (Object.keys(expanded.extensions.exception).length === 0) {
64 delete expanded.extensions.exception;
65 }
66 return expanded;
67}
68function toApolloError(error, code = 'INTERNAL_SERVER_ERROR') {
69 let err = error;
70 if (err.extensions) {
71 err.extensions.code = code;
72 }
73 else {
74 err.extensions = { code };
75 }
76 return err;
77}
78exports.toApolloError = toApolloError;
79function fromGraphQLError(error, options) {
80 const copy = options && options.errorClass
81 ? new options.errorClass(error.message)
82 : new ApolloError(error.message);
83 Object.keys(error).forEach(key => {
84 copy[key] = error[key];
85 });
86 copy.extensions = Object.assign(Object.assign({}, copy.extensions), error.extensions);
87 if (!copy.extensions.code) {
88 copy.extensions.code = (options && options.code) || 'INTERNAL_SERVER_ERROR';
89 }
90 Object.defineProperty(copy, 'originalError', { value: {} });
91 Object.getOwnPropertyNames(error).forEach(key => {
92 Object.defineProperty(copy.originalError, key, { value: error[key] });
93 });
94 return copy;
95}
96exports.fromGraphQLError = fromGraphQLError;
97class SyntaxError extends ApolloError {
98 constructor(message) {
99 super(message, 'GRAPHQL_PARSE_FAILED');
100 Object.defineProperty(this, 'name', { value: 'SyntaxError' });
101 }
102}
103exports.SyntaxError = SyntaxError;
104class ValidationError extends ApolloError {
105 constructor(message) {
106 super(message, 'GRAPHQL_VALIDATION_FAILED');
107 Object.defineProperty(this, 'name', { value: 'ValidationError' });
108 }
109}
110exports.ValidationError = ValidationError;
111class AuthenticationError extends ApolloError {
112 constructor(message) {
113 super(message, 'UNAUTHENTICATED');
114 Object.defineProperty(this, 'name', { value: 'AuthenticationError' });
115 }
116}
117exports.AuthenticationError = AuthenticationError;
118class ForbiddenError extends ApolloError {
119 constructor(message) {
120 super(message, 'FORBIDDEN');
121 Object.defineProperty(this, 'name', { value: 'ForbiddenError' });
122 }
123}
124exports.ForbiddenError = ForbiddenError;
125class PersistedQueryNotFoundError extends ApolloError {
126 constructor() {
127 super('PersistedQueryNotFound', 'PERSISTED_QUERY_NOT_FOUND');
128 Object.defineProperty(this, 'name', {
129 value: 'PersistedQueryNotFoundError',
130 });
131 }
132}
133exports.PersistedQueryNotFoundError = PersistedQueryNotFoundError;
134class PersistedQueryNotSupportedError extends ApolloError {
135 constructor() {
136 super('PersistedQueryNotSupported', 'PERSISTED_QUERY_NOT_SUPPORTED');
137 Object.defineProperty(this, 'name', {
138 value: 'PersistedQueryNotSupportedError',
139 });
140 }
141}
142exports.PersistedQueryNotSupportedError = PersistedQueryNotSupportedError;
143class UserInputError extends ApolloError {
144 constructor(message, properties) {
145 super(message, 'BAD_USER_INPUT', properties);
146 Object.defineProperty(this, 'name', { value: 'UserInputError' });
147 }
148}
149exports.UserInputError = UserInputError;
150function formatApolloErrors(errors, options) {
151 if (!options) {
152 return errors.map(error => enrichError(error));
153 }
154 const { formatter, debug } = options;
155 const enrichedErrors = errors.map(error => enrichError(error, debug));
156 const makePrintable = error => {
157 if (error instanceof Error) {
158 const graphQLError = error;
159 return Object.assign(Object.assign(Object.assign({ message: graphQLError.message }, (graphQLError.locations && { locations: graphQLError.locations })), (graphQLError.path && { path: graphQLError.path })), (graphQLError.extensions && { extensions: graphQLError.extensions }));
160 }
161 return error;
162 };
163 if (!formatter) {
164 return enrichedErrors;
165 }
166 return enrichedErrors.map(error => {
167 try {
168 return makePrintable(formatter(error));
169 }
170 catch (err) {
171 if (debug) {
172 return enrichError(err, debug);
173 }
174 else {
175 const newError = fromGraphQLError(new graphql_1.GraphQLError('Internal server error'));
176 return enrichError(newError, debug);
177 }
178 }
179 });
180}
181exports.formatApolloErrors = formatApolloErrors;
182function hasPersistedQueryError(errors) {
183 return Array.isArray(errors)
184 ? errors.some(error => error instanceof PersistedQueryNotFoundError ||
185 error instanceof PersistedQueryNotSupportedError)
186 : false;
187}
188exports.hasPersistedQueryError = hasPersistedQueryError;
189//# sourceMappingURL=index.js.map
\No newline at end of file