UNPKG

fastify-http-errors-enhanced

Version:

A error handling plugin for Fastify that uses enhanced HTTP errors.

41 lines (40 loc) 2.09 kB
import fastifyPlugin from 'fastify-plugin'; import { handleErrors, handleNotFoundError } from './handlers.js'; import { kHttpErrorsEnhancedConfiguration, kHttpErrorsEnhancedResponseValidations } from './interfaces.js'; import { addResponseValidation, compileResponseValidationSchema } from './validation.js'; export * from './handlers.js'; export * from './interfaces.js'; export { convertValidationErrors, niceJoin, validationMessagesFormatters } from './validation.js'; export const plugin = fastifyPlugin(function(instance, options, done) { const isProduction = process.env.NODE_ENV === 'production'; const convertResponsesValidationErrors = options.convertResponsesValidationErrors ?? !isProduction; const handle404Errors = options.handle404Errors ?? true; const configuration = { hideUnhandledErrors: options.hideUnhandledErrors ?? isProduction, convertValidationErrors: options.convertValidationErrors ?? true, responseValidatorCustomizer: options.responseValidatorCustomizer, allowUndeclaredResponses: options.allowUndeclaredResponses ?? false, use422ForValidationErrors: options.use422ForValidationErrors ?? false, preHandler: typeof options.preHandler === 'function' ? options.preHandler : undefined }; instance.decorate(kHttpErrorsEnhancedConfiguration, undefined); instance.decorateRequest(kHttpErrorsEnhancedConfiguration, undefined); instance.addHook('onRequest', (request, _, done)=>{ request[kHttpErrorsEnhancedConfiguration] = configuration; done(); }); instance.setErrorHandler(handleErrors); if (handle404Errors) { instance.setNotFoundHandler(handleNotFoundError); } if (convertResponsesValidationErrors) { instance.decorate(kHttpErrorsEnhancedResponseValidations, []); instance.addHook('onRoute', addResponseValidation); instance.addHook('onReady', compileResponseValidationSchema.bind(instance, configuration)); } done(); }, { name: 'fastify-http-errors-enhanced', fastify: '5.x' }); export default plugin;