UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

62 lines 2.62 kB
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