UNPKG

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