2021-10-27 18:54:58 +02:00
|
|
|
'use strict';
|
|
|
|
|
2021-10-29 12:23:28 +02:00
|
|
|
const { toUpper, snakeCase } = require('lodash/fp');
|
|
|
|
const {
|
|
|
|
HttpError,
|
|
|
|
ForbiddenError,
|
|
|
|
UnauthorizedError,
|
|
|
|
ApplicationError,
|
|
|
|
ValidationError,
|
|
|
|
} = require('@strapi/utils').errors;
|
|
|
|
const {
|
|
|
|
ApolloError,
|
|
|
|
UserInputError: ApolloUserInputError,
|
|
|
|
ForbiddenError: ApolloForbiddenError,
|
|
|
|
} = require('apollo-server-errors');
|
|
|
|
|
|
|
|
const formatToCode = name => `STRAPI_${toUpper(snakeCase(name))}`;
|
|
|
|
|
2021-10-27 18:54:58 +02:00
|
|
|
const formatGraphqlError = error => {
|
2021-10-29 12:23:28 +02:00
|
|
|
const originalError = error.originalError;
|
|
|
|
|
|
|
|
if (originalError instanceof ApolloError) {
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (originalError instanceof ForbiddenError || originalError instanceof UnauthorizedError) {
|
|
|
|
return new ApolloForbiddenError(originalError.message, { details: originalError.details });
|
|
|
|
}
|
|
|
|
|
|
|
|
if (originalError instanceof ValidationError) {
|
|
|
|
return new ApolloUserInputError(originalError.message, { details: originalError.details });
|
|
|
|
}
|
|
|
|
|
|
|
|
if (originalError instanceof ApplicationError || originalError instanceof HttpError) {
|
|
|
|
const name = formatToCode(originalError.name);
|
|
|
|
return new ApolloError(originalError.message, name, { details: originalError.details });
|
|
|
|
}
|
2021-10-27 18:54:58 +02:00
|
|
|
|
2021-10-29 12:23:28 +02:00
|
|
|
// Internal server error
|
|
|
|
strapi.log.error(error);
|
|
|
|
error.message = 'An error occured';
|
2021-10-27 18:54:58 +02:00
|
|
|
return error;
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = formatGraphqlError;
|