1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.formatApolloErrors = exports.UserInputError = exports.PersistedQueryNotSupportedError = exports.PersistedQueryNotFoundError = exports.ForbiddenError = exports.AuthenticationError = exports.ValidationError = exports.SyntaxError = exports.fromGraphQLError = exports.toApolloError = exports.ApolloError = void 0;
|
4 | const graphql_1 = require("graphql");
|
5 | class 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 | }
|
28 | exports.ApolloError = ApolloError;
|
29 | function toGraphQLError(error) {
|
30 | return new graphql_1.GraphQLError(error.message, error.nodes, error.source, error.positions, error.path, error.originalError, error.extensions);
|
31 | }
|
32 | function 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 | }
|
82 | function 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 | }
|
92 | exports.toApolloError = toApolloError;
|
93 | function 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 | }
|
118 | exports.fromGraphQLError = fromGraphQLError;
|
119 | class SyntaxError extends ApolloError {
|
120 | constructor(message) {
|
121 | super(message, 'GRAPHQL_PARSE_FAILED');
|
122 | Object.defineProperty(this, 'name', { value: 'SyntaxError' });
|
123 | }
|
124 | }
|
125 | exports.SyntaxError = SyntaxError;
|
126 | class ValidationError extends ApolloError {
|
127 | constructor(message) {
|
128 | super(message, 'GRAPHQL_VALIDATION_FAILED');
|
129 | Object.defineProperty(this, 'name', { value: 'ValidationError' });
|
130 | }
|
131 | }
|
132 | exports.ValidationError = ValidationError;
|
133 | class AuthenticationError extends ApolloError {
|
134 | constructor(message, extensions) {
|
135 | super(message, 'UNAUTHENTICATED', extensions);
|
136 | Object.defineProperty(this, 'name', { value: 'AuthenticationError' });
|
137 | }
|
138 | }
|
139 | exports.AuthenticationError = AuthenticationError;
|
140 | class ForbiddenError extends ApolloError {
|
141 | constructor(message, extensions) {
|
142 | super(message, 'FORBIDDEN', extensions);
|
143 | Object.defineProperty(this, 'name', { value: 'ForbiddenError' });
|
144 | }
|
145 | }
|
146 | exports.ForbiddenError = ForbiddenError;
|
147 | class PersistedQueryNotFoundError extends ApolloError {
|
148 | constructor() {
|
149 | super('PersistedQueryNotFound', 'PERSISTED_QUERY_NOT_FOUND');
|
150 | Object.defineProperty(this, 'name', {
|
151 | value: 'PersistedQueryNotFoundError',
|
152 | });
|
153 | }
|
154 | }
|
155 | exports.PersistedQueryNotFoundError = PersistedQueryNotFoundError;
|
156 | class PersistedQueryNotSupportedError extends ApolloError {
|
157 | constructor() {
|
158 | super('PersistedQueryNotSupported', 'PERSISTED_QUERY_NOT_SUPPORTED');
|
159 | Object.defineProperty(this, 'name', {
|
160 | value: 'PersistedQueryNotSupportedError',
|
161 | });
|
162 | }
|
163 | }
|
164 | exports.PersistedQueryNotSupportedError = PersistedQueryNotSupportedError;
|
165 | class UserInputError extends ApolloError {
|
166 | constructor(message, extensions) {
|
167 | super(message, 'BAD_USER_INPUT', extensions);
|
168 | Object.defineProperty(this, 'name', { value: 'UserInputError' });
|
169 | }
|
170 | }
|
171 | exports.UserInputError = UserInputError;
|
172 | function 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 | }
|
208 | exports.formatApolloErrors = formatApolloErrors;
|
209 |
|
\ | No newline at end of file |