@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
62 lines • 2.62 kB
JavaScript
import { logger } from '../../log';
import { extractErrorMessage } from '../../error';
function isOurError(error) {
return (error instanceof Error &&
Object.prototype.hasOwnProperty.call(error, '__fromErrorLibrary'));
}
function buildGraphQLLogContext(input, error, defaultContext) {
const errorWithMiddleware = error;
const middlewareChain = errorWithMiddleware.middlewareChain;
const chainString = Array.isArray(middlewareChain)
? middlewareChain.join(' -> ')
: undefined;
return {
...defaultContext,
...Object.fromEntries(Object.entries(error).filter(([key]) => !['name', 'message', 'stack'].includes(key))),
requestId: input.context.awsRequestId || 'unknown',
functionName: input.context.functionName,
graphql: {
fieldName: input.event.fieldName,
parentTypeName: input.event.typeName,
arguments: input.event.arguments,
},
middlewareChain: chainString,
};
}
export function createGraphQLErrorHandler(config = {}) {
const { includeStackTrace = process.env.NODE_ENV === 'development', defaultContext = {}, } = config;
return async (input, next) => {
try {
return await next();
}
catch (error) {
let standardError;
if (isOurError(error)) {
standardError = error;
}
else {
logger.warn('Non-standard error thrown, wrapping with throwError', {
error,
});
const wrappedMessage = 'Non-standard error thrown to GraphQL error handler';
standardError = new Error(wrappedMessage);
standardError.originalError = error;
}
const logContext = buildGraphQLLogContext(input, standardError, defaultContext);
logger.error(extractErrorMessage(standardError), {
...logContext,
...Object.fromEntries(Object.entries(standardError).filter(([key]) => !['name', 'message', 'stack'].includes(key))),
requestId: input.context.awsRequestId || 'unknown',
functionName: input.context.functionName,
graphql: {
fieldName: input.event.fieldName,
parentTypeName: input.event.typeName,
arguments: input.event.arguments,
},
...(includeStackTrace && { stack: standardError.stack }),
});
throw standardError;
}
};
}
//# sourceMappingURL=GraphQLErrorHandler.js.map