fastify-http-errors-enhanced
Version:
A error handling plugin for Fastify that uses enhanced HTTP errors.
41 lines (40 loc) • 2.09 kB
JavaScript
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;